为什么这个while循环中的表达式导致无限循环?

问题描述:

新来OOP和只是想知道,为什么这会导致一个无限循环:为什么这个while循环中的表达式导致无限循环?

while ($row=$dbh->query("SELECT * FROM animal")->fetch(PDO::FETCH_ASSOC)){ 
    printf("A(n) %s is a type of %s<br />", $row['name'], $row['species']); 
} 

然而,这并不导致无限while循环

$sth=$dbh->query("SELECT * FROM animal"); 
while ($row=$sth->fetch(PDO::FETCH_ASSOC)){ 
    printf("A(n) %s is a type of %s<br />", $row['name'], $row['species']); 
} 
+0

因为在第一次你每次都在查询数据库。如果有行,那么它总是“真”。 –

在第一个代码示例你重新运行在循环中重复查询,每次只读取第一行。

在第二个代码示例中,首先在循环开始之前运行查询一次。然后循环,获取结果集中的每一行,直到没有更多行。

while循环中的括号语句每次都执行。这意味着你的查询每次都会开始,所以你总是看着第一个对象,并且如此无限循环!

第二种方法更正确。