php变量导致while循环在无限循环中显示数据

时间:2013-01-20 21:35:17

标签: php loops pdo while-loop

我很困惑这些代码片段在while循环中显示结果的方式有所不同。第一段代码完美地工作,但第二段显示结果,但是在无限循环中这样做,只是重复结果。有人可以向我解释原因吗?

$stmt = $db_conn->prepare($sql);

$stmt->execute(array("Lorna", 3));

while($result = $stmt->fetch()){
    echo $result["name"] . "<br />" . $result["description"] . "<br />";        
}

如果我将$ stmt-&gt; fetch()放入一个名为$ data的变量中并尝试传递此而不是仅仅在while循环中放入$ stmt-&gt; fetch(),我会得到一个无限循环。

$stmt = $db_conn->prepare($sql);

$stmt->execute(array("Lorna", 3));

$data = $stmt->fetch();

while($result = $data){
    echo $result["name"] . "<br />" . $result["description"] . "<br />";        
}

提前致谢!

3 个答案:

答案 0 :(得分:2)

如果调用fetch(),则会使行前进。

案例1

while($result = $stmt->fetch()){
    //every iteration executes fetch
    //advances it by one row
    //turns to false when no more rows
}

案例2

$data = $stmt->fetch();
//now at first row
while($result = $data){
    //always at first row 
    //always evaluates to true (no calls to fetch)
}

答案 1 :(得分:2)

在第一个代码段中,每次调用while时,查询结果指针都会移动到新行。最终指针将到达结果集的末尾,$stmt->fetch()将返回false并结束循环。

在第二个循环中,您只在循环之前迭代到下一行一次。然后循环将反复遍历相同的循环,因为没有任何变化,因此循环条件永远不会返回false。

答案 2 :(得分:1)

第一个循环检查函数返回的值,该值可能为null,导致循环结束。

第二个循环只是做作业。