Я пытаюсь вставить несколько строк сразу в свой db, я разместил вопрос здесь, как на днях, здесь . Что касается моего запроса на вставку, вставьте только одну строку в db, даже если это необходимо для вставки двух или более строк данных в БД. Из-за того, что этот запрос вставки вставляет данные корзины покупок, я не знаю количества элементов, которые пользователь может вставить в db.
Проведя несколько дней исследований, я обнаружил, что метод, который я сейчас использую, может быть лучшим способом решить проблему, это мой первый раз, когда я использую цикл foreach и создаю запрос вставки таким образом, я получаю следующую ошибку:
Неустранимая ошибка: Непринятая ошибка: вызов функции-члена execute () в boolean
- Как создать установщик для веб-сайта. PHP mysql
- Лучшая практика вставки NULL в MySQL с помощью PHP
- mysql вставить в таблицу его имя содержит тире
- Как обрабатывать данные объекта из базы данных MySQL с помощью PHP PDO?
- Обновление базы данных из Javascript путем вызова скрипта PHP
- Предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым ресурсом результата MySQL
Я знаю, что мой отчет о подготовке не удался, но я надеялся, что кто-то сможет объяснить или продемонстрировать, где я ошибся, поскольку я пытаюсь учиться на своих ошибках. Я не уверен, насколько я создал свой запрос или даже способ, которым я его выполнил.
Код
$_query = "INSERT INTO ord_dets(Order_ID,custmer_ip,Resturant_ID,Resturant_name,City_name, Product_Id,Product_Name,Product_Price,item_sub) VALUES "; $_query_parts = array(); for($x=0;$x<count($OI); $x++){ $_query_parts = "('" . $OI[$x] . "', '" . $ip[$x] . "','" . $_SESSION['rest_id'][$x] . "','" . $rest_name[$x] . "', '" . $City_name[$x] . "','" . $Product_Id[$x] . "','" . $product_name[$x] . "','" . $prod_price[$x] . "','" . $item_sub[$x] . "')"; } $query_run = $dbc->prepare($_query); echo $_query; if (!$query_run->execute()) { $insertError = "There was an error inserting data: " . $query_run->error; print "affected rows:" . $query_run->affected_rows; //how many records affected? } }
измените его так, чтобы отделить его от комы.
$_query = "INSERT INTO ord_dets(Order_ID,custmer_ip,Resturant_ID,Resturant_name,City_name, Product_Id,Product_Name,Product_Price,item_sub) VALUES "; $_query_parts = array(); $sep =""; for($x=0;$x<count($OI); $x++){ $_query_parts = "$sep('" . $OI[$x] . "', '" . $ip[$x] . "','" . $_SESSION['rest_id'][$x] . "','" . $rest_name[$x] . "', '" . $City_name[$x] . "','" . $Product_Id[$x] . "','" . $product_name[$x] . "','" . $prod_price[$x] . "','" . $item_sub[$x] . "')"; $sep=","; } $query_run = $dbc->prepare($_query); echo $_query; if (!$query_run->execute()) { $insertError = "There was an error inserting data: " . $query_run->error; print "affected rows:" . $query_run->affected_rows; //how many records affected? } }
Ваш SQL генерируется неправильно: INSERT INTO ord_dets(Order_ID,custmer_ip,Resturant_ID,Resturant_name,City_name, Product_Id,Product_Name,Product_Price,item_sub) VALUES (...,...,....)(...,...,....)(...,...,....)(...,...,....)(...,...,....)
Вот как это выглядит. Исправить это объявление не будет ошибки
Решение здесь заключается в добавлении запятых между значениями: VALUES (...,...,....),(...,...,....),(...,...,....),(...,...,....),(...,...,....)
UPD : На самом деле я не вижу, где вы добавляете $query_parts
в строку запроса
UPD2 : вот как это должно выглядеть, чтобы избежать инъекций sql:
$_query = "INSERT INTO ord_dets(Order_ID,custmer_ip,Resturant_ID,Resturant_name,City_name, Product_Id,Product_Name,Product_Price,item_sub) VALUES (?,?,?,?,?,?,?,?,?)"; $stmt = $dbc->prepare($_query); for($x=0;$x<count($OI); $x++){ if (!$query_run->execute([$OI[$x] , $ip[$x], $_SESSION['rest_id'][$x] , $rest_name[$x] , $City_name[$x] , $Product_Id[$x] , $product_name[$x] , $prod_price[$x] ,$item_sub[$x]])) ) { insertError = "There was an error inserting data: " . $query_run->error; print "affected rows:" . $query_run->affected_rows; } }