PHP mysqli_query 在 foreach 循环中不起作用

标签 php mysql mysqli foreach

我有一个 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/

相关文章:

php - Laravel 5.4 上的示例 PHPUnit 测试失败并返回 404

php_header函数如果卡住就kill掉

mysql - phpmyadmin 选择字段在关系 View 中显示缺失

php - mysql插入问题

javascript - 通过HTML表单访问PHP文件

php - Mysql通过比较另一个表中的值从表中选择

mysql - 将 2 个表连接在一起并使用基于单独 mysql 查询的 where 函数

php生成图像?

php - 使用PHP根据用户输入“构建”准备好的SQL语句

javascript - 使用 php 对 MySql 的输出进行排序