mysql — php mysqli_multi_query () прекращает вставку после первого запроса

Я пытаюсь вставить несколько строк в одну таблицу, используя mysqli_multi_query функция, но она выполняет только первый запрос. Я попытался добавить значения в конец первого запроса, разделенные запятой, но ничего не получается. Какие-либо предложения?

Я переключился на подготовленные заявления, но все еще только первый результат вставлен. Я что-то пропустил?

$DBConnect = mysqli_connect("localhost", "root", "", "getpressed");

if ($DBConnect->connect_error) {
die("Connection failed: " . $DBConnect->connect_error);

}

$stmt = $DBConnect->prepare("INSERT INTO orderdetails (orderID, productID, quantity) VALUES (?, ?, ?)");
$stmt->bind_param("iii", $orderID, $productID, $quantity);

$orderID = $orderID;
$productID = 1;
$quantity = $sportShirtQuantity;
$stmt->execute();

$orderID = $orderID;
$productID = 2;
$quantity = $sportCoatQuantity;
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$DBConnect->close();

0

Решение

У меня был индекс первичного ключа для orderID, который не позволял бы мне вставлять несколько строк с одинаковым orderID. Я идиот. Спасибо за вашу помощь. Это работает намного лучше с подготовленными заявлениями, как предложено Тэдмэном.

1

Другие решения

Я немного изменил твой код

$mysqli = new mysqli("localhost", "root", "", "getpressed");

if ($mysqli->connect_errno) {
die("Connection failed: " . $mysqli->connect_error);
}

$sql = "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 1, '".$sportShirtQuantity."');";
$sql .= "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 2, '".$sportCoatQuantity."');";

if ($mysqli->multi_query($sql))) {
echo "New records created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($mysqli);
}
do {
if ($res = $mysqli->store_result()) {
var_dump($res->fetch_all(MYSQLI_ASSOC));
$res->free();
}
} while ($mysqli->more_results() && $mysqli->next_result());

Я также настоятельно рекомендую вам использовать подготовленные заявления PDO в будущем.

-2

Удалите точку с запятой из последнего утверждения. В документации отмечается, что точка с запятой для этого метода используется для объединения операторов, а не для их завершения.

Прочитайте документацию здесь: Ссылка на сайт

$sql = "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 1, '".$sportShirtQuantity."');";
$sql .= "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 2, '".$sportCoatQuantity."')";
-3
По вопросам рекламы [email protected]