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

时间:2011-09-26 09:12:13

标签: php mysql pdo prepared-statement

oop的新手,只是想知道为什么会导致无限循环:

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']);
}

然而,这不会导致无限循环

$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']);
}

2 个答案:

答案 0 :(得分:5)

在第一个代码示例中,您将循环重复运行查询,每次只获取第一行。

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

答案 1 :(得分:3)

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

第二种方式更正确。