php - 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);
它将按我的预期工作,提交表单后,页面将显示结果。
解决方案
不要使用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();
推荐阅读
- python - 如何获取两个标记之间的子字符串并在Python中重复该过程N次
- java - 是否可以从 .forEach 方法列出文件特征?
- ios - 无法生成进程“/usr/bin/touch”(执行格式错误)
- python - 如何在文件中显示时间?(Python)
- google-apps-script - 我的 GSM Gmail 插件不显示该卡
- nlp - 如何在未标记的数据上微调 BERT?
- qt - qml 动态小部件的正确架构是什么?
- spring - 如何使用 envoy-proxy 在 Grpc 中以 json 格式发送错误响应
- javascript - `program.parse(process.argv)` 在 command.js 中做了什么?
- excel - 如何使用带有 .VBS 或 .BAT 的进程标识符激活打开的应用程序窗口