我有一个 foreach 循环,它遍历 MySQL 数据库中的一组表名,然后执行 mysqli 查询以重新索引该表。
查询和循环似乎都工作正常,但是在一定数量的表之后查询停止工作。
如果我简单地回显每个表名,那么它将显示所有表名,这样我就知道它不会遗漏循环中的表,而且我可以看到前几个表已正确重新编制索引。它似乎在大约 50 个表后停止工作。
这是循环:
foreach($tables as $table) {
mysqli_multi_query($connect, "SET @newid=0; UPDATE $table SET ID=(@newid:=@newid+1) ORDER BY ID;");
}
是什么导致它停止工作,mysql 是否超时或中断操作,因为如此多的查询正在快速连续运行?还有别的吗?
使用 mysqli_error 我得到:
Commands out of sync; you can't run this command now
最佳答案
每当我看到这个错误之前,这是因为 MySQL 查询返回了多个结果集,其中一些仍未获取。这在使用存储过程时也很常见。要诊断此问题的原因,您可以在循环末尾放置如下一行,以确保在尝试运行另一个查询之前获取任何待处理的结果集:
while(mysqli_more_results($Conn)) mysqli_next_result($Conn);
(请记住将连接 $Conn
更改为您的名称)。这里有几个指向更多信息和示例的链接。
http://php.net/manual/en/mysqli.more-results.php https://www.w3schools.com/php/func_mysqli_next_result.asp
问候,
詹姆斯
关于PHP mysqli_query 在 foreach 循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46554341/