php 的 mysqli_multi_query 不工作
Posted
技术标签:
【中文标题】php 的 mysqli_multi_query 不工作【英文标题】:php's mysqli_multi_query not working 【发布时间】:2016-02-23 05:19:12 【问题描述】:我一直在尝试执行多个查询,因此我已经搜索了如何执行此操作的更好方法,并且我在 php.ini 中阅读了此 mysqli_multi_query。
我自己尝试了它以查看结果,但它一直给我错误。代码如下:
$studid = $_GET['stud_id'];
$classcode = $_GET['class'];
$conn = new mysqli($host, $username, $password, $dbname) or die('Can not connect to database');
$sql = "SELECT * FROM tbl_students WHERE stud_id = '".$studid."'";
$sql.= "SELECT * FROM tbl_classes WHERE class_code = '".$classcode."'";
if (mysqli_multi_query($conn, $sql))
do
/* store first result set */
if ($result = mysqli_store_result($conn))
while ($row = mysqli_fetch_row($result))
$studname = $row[3].", ".$row[1];
mysqli_free_result($result);
/* print divider */
if (mysqli_more_results($conn))
printf("-----------------\n");
$studname = $row['fname'];
while (mysqli_more_results($conn));
else echo "error";
$conn->close();
使用上面的代码,它只会打印我设置的 else 语句中的错误。我还尝试将第二个查询更改为$sql .= "SELECT * FROM tbl_classes WHERE class_code = '".$classcode."'";
并尝试在第一个查询之后放置分号以告诉 SQL 我已完成第一个查询,因为我将两个字符串放在一起,但仍然没有运气。
【问题讨论】:
你需要在查询中加一个分号 @Dagon 正如我上面所说的,我已经尝试过了。我试过这样$sql = "SELECT * FROM tbl_students WHERE stud_id = '".$studid."';";
但它会一直加载下去。
坦率地说,10 年来我从未使用过 MySQL multi
@Dagon 那么我该如何以不同的方式执行它呢?
你能检查一下:$sql = "SELECT * FROM tbl_students WHERE stud_id="."'".$studid."';"; --- 如果这也不起作用,请尝试使用 bind param
【参考方案1】:
试试这个
$studid = $_GET['stud_id'];
$classcode = $_GET['class'];
$conn = new MySQLi($host, $username, $password, $dbname) or die('Can not connect to database');
$sql = "SELECT * FROM tbl_students WHERE stud_id = '$studid';";
$sql.= "SELECT * FROM tbl_classes WHERE class_code = '$classcode'";
if ($conn->multi_query($sql))
do
/* store first result set */
if ($result = mysqli_store_result($conn))
while ($row = mysqli_fetch_row($result))
$studname = $row[3].", ".$row[1];
mysqli_free_result($result);
/* print divider */
if (mysqli_more_results($conn))
printf("-----------------\n");
$studname = $row['fname'];
while (mysqli_more_results($conn));
else echo "error";
$conn->close();
【讨论】:
它将永远加载。内容不会显示。 条件为真 如果我在第一个查询中删除分号,它工作正常。但是当我放它时,它会不停地加载。 检查你的结果变量【参考方案2】:进行一次查询而不是两次:
"SELECT ts.*, tc.*
FROM tbl_students as ts, tbl_classes as tc
WHERE ts.stud_id = '$studid'
AND tc.class_code = '$classcode'"
注意:如果您获得冗余数据,请使用 group by。
【讨论】:
以上是关于php 的 mysqli_multi_query 不工作的主要内容,如果未能解决你的问题,请参考以下文章
如果不使用 mysqli_multi_query,SQL 注入将无法工作
我收到一个错误“命令不同步;当我使用mysqli_multi_query时,你现在无法运行此命令