массив к строке на вставке PDO

0

У меня есть массив, который включает 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. Спасибо заранее за любую помощь.

Теги:

1 ответ

1
Лучший ответ

Поговорив с вами в чате, это решение, с которым мы столкнулись.

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() внутри цикла.

  • 0
    Благодаря тонну. Я ценю дополнительное время, которое вы взяли
  • 0
    @nomistic Нет проблем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню