首页 > 解决方案 > mysqli_multi_query 和网站上的结果可见

问题描述

当我使用mysqli_query时,提交表单后的网站会重新加载并显示可见的更改,但是如果我使用mysqli_multi_query更改多个表格,页面会显示“无结果”(或者如果没有结果,则显示我设置的任何内容),但是如果我然后手动重新加载网站,所有内容都已更改,这意味着数据库中的记录已更新。我需要更改页面并再次返回或刷新以查看结果。例如:

$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);

它将按我的预期工作,提交表单后,页面将显示结果。

标签: phpmysqlimysqli-multi-query

解决方案


不要使用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();

推荐阅读