【问题标题】:Infinite Loop with While inside Foreach and MySQLForeach 和 MySQL 中的 While 无限循环
【发布时间】:2013-04-24 01:07:25
【问题描述】:

我在使用 PHP/MySQL 时遇到了一个非常奇怪的问题...

回声“id;id”

 foreach($ids as $id) {
      echo "id;";
 }

回声“id;id;id;id;...”(无限循环)

 foreach($ids as $id) {
      while($row = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `Table` WHERE `id`=$id;") {
           echo "id;";
      }
 }

我有一个 foreach() 语句的原因是因为我已经对 $ids 进行了排序。

【问题讨论】:

    标签: php arrays foreach mysqli while-loop


    【解决方案1】:

    获得一个无限循环,这仅仅是因为您每次都通过while 循环重新运行查询。这意味着,对于每个$id,您不断运行查询并从中提取第一行。因此,对于返回多于零行的任何查询,该查询的持续重新执行将使while 循环无限。

    它在功能上类似于下面的伪代码,它也将永远循环,因为你正在修改循环内的控制条件:

    loop i from 1 to 10
        set i to 1
    endloop
    

    您应该尝试以下方法:

    foreach($ids as $id) {
        $result = mysqli_query($conn, "SELECT * FROM `Table` WHERE `id`=$id;");
        while($row = mysqli_fetch_array($result)) {
           echo "id;";
        }
    }
    

    这将为每个 ID 运行一次查询一次while 循环将处理该查询的行。

    【讨论】:

    • $ids 中只有两个值,为什么会运行两次以上的查询?
    • @rtainc,无限循环是while,而不是foreach。我会澄清的。
    • @rtainc,放松,在我漫长的职业生涯中,我做过远远愚蠢的事情,我在这里不会承认:-)
    猜你喜欢
    • 2014-03-29
    • 2012-12-24
    • 2018-05-20
    • 2013-10-01
    • 2015-06-25
    • 1970-01-01
    • 2013-02-22
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多