【问题标题】:PHP mysqli_query not working in foreach loopPHP mysqli_query 在 foreach 循环中不起作用
【发布时间】:2017-10-03 22:26:54
【问题描述】:

我有一个 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 我得到:

命令不同步;你现在不能运行这个命令

【问题讨论】:

  • “停止工作”是什么意思?你有错误吗?
  • 没有错误,但在数组后面的表中,ID 不会重置为 1、2、3 等。它们会保持在 1、2、5、8
  • @brain99 我已经用一条错误消息更新了我的帖子
  • 这两个资源可能会让您对如何进行此操作有不同的想法,而不是使用多个查询语句。 MySQL Manual - Rebuilding or Repairing Tables or Indexeshow to reindex mysql table。希望对您有所帮助。

标签: php mysql mysqli foreach


【解决方案1】:

每当我看到这个错误之前,这是因为 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

问候,

詹姆斯

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多