代码之家  ›  专栏  ›  技术社区  ›  Edward144

PHP mysqli\u查询在foreach循环中不工作

  •  2
  • Edward144  · 技术社区  · 7 年前

    我有一个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超时还是因为如此多的查询连续快速运行而中断了操作?还有别的吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   James Scott    7 年前

    我以前每次看到这个错误都是因为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

    当做