Невозможно выполнить () запрос после выполнения bindValue () в al oop, но выполняется, когда bindValue запускается автономно для каждого имени столбца в таблице - PullRequest
1 голос
/ 02 мая 2020

У меня есть следующие два блока кода, служащие одной и той же цели (по мне), но последний не работает, как задумано. Следующий код выполняется так, как было задумано. Все изменения отражены в базе данных, как и ожидалось.

$sql = 'INSERT INTO lesson_plan (class_date, v_id_lp) VALUES(:class_date, :v_id_lp)';
$this->query_new($sql);
$class_date_string = 'class_date';
$id_string = 'v_id_lp';
$class_date = '05-May-2020';
$id = '6';
$this->stmt->bindValue(':' . $class_date_string, $class_date);
$this->stmt->bindValue(':' . $id_string, $id);
$this->stmt->execute();

Но вышеупомянутые имена столбцов после table_name - просто капля воды в могучем океане по сравнению с другими запросами в моем приложении, и я не хочу переписывать все bindValue() несколько раз, как указано выше. Итак, я разделил (или попытался) l oop, над которым я пытался работать со вчерашнего дня, но безуспешно. Следующий код возвращает ошибку Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in 'File path' on 'line number'.

$sql = 'INSERT INTO lesson_plan (class_date, v_id_lp) VALUES(:class_date, :v_id_lp)';
$this->query_new($sql);
$some_array = ['class_date' => '06-May-2020','id' => '6'];
foreach(array_keys($some_array) as $string){
            $this->stmt->bindValue(':' . $string, array_values($some_array));
        }
$this->stmt->execute();

Я прочитал несколько похожих вопросов о переполнении стека (некоторая информация для тех, кто хочет sh закрыть мой вопрос), но, будучи новичком, я этого не сделал понять любой из этих ответов. Теперь, если кто-то хочет помочь, пожалуйста, сделайте, если кто-то все еще не может ответить на вопрос sh, не стесняйтесь делать (как вы всегда делаете), но знайте, что не все студенты-медики кодируют во время блокировки, особенно когда у них есть не разбираясь в кодировании, по крайней мере прокомментируйте ошибку в моем коде, прежде чем закрыть мой вопрос, это было бы очень полезно.

1 Ответ

1 голос
/ 02 мая 2020

Когда вы связываете каждый элемент, вы связываете array_values(). Измените l oop на ...

foreach($some_array as $name => $value){
    $this->stmt->bindValue(':' . $name, $value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...