2

我对这些代码片段在 while 循环中显示结果的不同之处感到困惑。第一段代码完美运行,但第二段显示结果,但在无限循环中这样做,只是重复结果。有人可以向我解释为什么吗?

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

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

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

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

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

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

$data = $stmt->fetch();

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

提前致谢!

4

3 回答 3

2

If 是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)
}
于 2013-01-20T21:38:40.730 回答
2

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

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

于 2013-01-20T21:38:55.827 回答
1

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

第二个循环只是做一个分配。

于 2013-01-20T21:39:37.157 回答