为什么这个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']);
}
答
在第一个代码示例你重新运行在循环中重复查询,每次只读取第一行。
在第二个代码示例中,首先在循环开始之前运行查询一次。然后循环,获取结果集中的每一行,直到没有更多行。
答
while循环中的括号语句每次都执行。这意味着你的查询每次都会开始,所以你总是看着第一个对象,并且如此无限循环!
第二种方法更正确。
因为在第一次你每次都在查询数据库。如果有行,那么它总是“真”。 –