вставить запрос с использованием приема петли foreach. Ошибка неактивности: вызов функции-члена execute () в булевом

Я пытаюсь вставить несколько строк сразу в свой db, я разместил вопрос здесь, как на днях, здесь . Что касается моего запроса на вставку, вставьте только одну строку в db, даже если это необходимо для вставки двух или более строк данных в БД. Из-за того, что этот запрос вставки вставляет данные корзины покупок, я не знаю количества элементов, которые пользователь может вставить в db.

Проведя несколько дней исследований, я обнаружил, что метод, который я сейчас использую, может быть лучшим способом решить проблему, это мой первый раз, когда я использую цикл foreach и создаю запрос вставки таким образом, я получаю следующую ошибку:

Неустранимая ошибка: Непринятая ошибка: вызов функции-члена execute () в boolean

Я знаю, что мой отчет о подготовке не удался, но я надеялся, что кто-то сможет объяснить или продемонстрировать, где я ошибся, поскольку я пытаюсь учиться на своих ошибках. Я не уверен, насколько я создал свой запрос или даже способ, которым я его выполнил.

Код

$_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? } } 

Solutions Collecting From Web of "вставить запрос с использованием приема петли foreach. Ошибка неактивности: вызов функции-члена execute () в булевом"

измените его так, чтобы отделить его от комы.

 $_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; } }