У меня есть массив, который включает insertId (как ключ) несколько других значений; это нужно представить как массив $ key => $ value (например, 1 => 2, 1 => 3, 1 => 5) и т.д.
Однако, когда я связываю параметры в цикле foreach, я продолжаю получать массив для преобразования строки. в результате я получаю одну строку, вставленную в db (правильный ключ, а затем 0).
function instructorSubject()
{
$query = "INSERT into instructor_has_subject
SET instructor_id = :instructor_id,
subject_id = :id";
$last_id = $this->conn->lastInsertId();
$stmt = $this->conn->prepare($query);
//print_r($last_id);
//print_r($this->id);
if (isset($this->id) && $this->id != '') {
foreach ($_POST as $values) {
$stmt->bindParam(":instructor_id", $last_id, PDO::PARAM_INT);
$stmt->bindParam(":id", $this->id, PDO::PARAM_INT);
}
if($stmt->execute())
{
return true;
}
else
{
var_dump($stmt);
print_r($stmt->errorInfo());
return false;
}
}
}
Пример массива выглядит примерно так: идентификатор insert: 87, а затем второй массив, представляющий собой пару прямых ключей => (например :) ([0] => 1 [1] => 3)
Я чувствую, что это имеет какое-то отношение к тому, где я привязываюсь в рамках foreach. Спасибо заранее за любую помощь.
Поговорив с вами в чате, это решение, с которым мы столкнулись.
function instructorSubject()
{
$query = "INSERT INTO instructor_has_subject (instructor_id, subject_id) VALUES (?,?)";
$last_id = $this->conn->lastInsertId();
$stmt = $this->conn->prepare($query);
if(!empty($this->id)) {
foreach($_POST['subject_id'] as $id) {
$stmt->execute(array(
$last_id,
$id
));
}
}
}
Главное, что мы изменили, я полагаю, менял $_POST
на $_POST['subject_id']
.
Мы также полностью удалили bindParam
из функции, вместо этого выбирая неназванные параметры и передавая переменные через execute()
внутри цикла.