mysqli_multi_query и видимый результат на сайте - PullRequest
0 голосов
/ 06 апреля 2020

Когда я использую mysqli_query, веб-сайт после отправки формы перезагружается с видимым изменением, но если я использую mysqli_multi_query для изменения более чем одной таблицы, на странице отображается «Нет результата» (или все, что я настроил для отображения если результата нет), но если я потом перезагружу веб-сайт вручную, все изменилось, что означает, что записи обновляются в базе данных. Мне нужно изменить страницу и вернуться снова или изменить sh, чтобы увидеть результат. Например:

$query = "UPDATE tools SET quantity=quantity+$quantity WHERE id = $tools;";
$query .= "UPDATE tools SET quantity=quantity-$quantity_edit WHERE id = $tools;";
$query .= "UPDATE rent SET quantity=$quantity_edit WHERE id=$rent_id;";
mysqli_multi_query($db, $query);

Если я отправлю форму с этим кодом, результатом будет «Нет результата», но если я перезагрузлю страницу, я увижу результат, например, измененное значение. Но если я сделаю это:

$query = "UPDATE tools SET quantity=quantity+$quantity WHERE id = $tools;";
$query2 = "UPDATE tools SET quantity=quantity-$quantity_edit WHERE id = $tools;";
$query3 = "UPDATE rent SET quantity=$quantity_edit WHERE id=$rent_id;";
mysqli_multi_query($db, $query);
mysqli_multi_query($db, $query2);
mysqli_multi_query($db, $query3);

Это будет работать так, как я ожидаю, после отправки формы страница покажет результат.

1 Ответ

1 голос
/ 06 апреля 2020

Не используйте mysqli_multi_query(). Это специальная функция, которая имеет очень узкий вариант использования, который не применим в вашем случае.

Вместо этого вы должны использовать подготовленные заявления.

У вас есть 3 отдельных запроса, поэтому вам нужно подготовить и выполнить 3 оператора. Это правильный способ выполнить ваши SQL операторы:

$stmt = $db->prepare('UPDATE tools SET quantity=quantity + ? WHERE id = ?');
$stmt->bind_param('ss', $quantity, $tools);
$stmt->execute();

$stmt = $db->prepare('UPDATE tools SET quantity=quantity - ? WHERE id = ?');
$stmt->bind_param('ss', $quantity_edit, $tools);
$stmt->execute();

$stmt = $db->prepare('UPDATE rent SET quantity = ? WHERE id = ?');
$stmt->bind_param('ss', $quantity_edit, $rent_id);
$stmt->execute();
...