在Foreach和MySQL内部的无限循环

时间:2013-04-24 01:07:25

标签: php arrays foreach mysqli while-loop

我对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()语句的原因是因为我对$ id进行了排序。

1 个答案:

答案 0 :(得分: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循环将处理该查询的行。