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

use*_*637 0 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']);
}
Run Code Online (Sandbox Code Playgroud)

但是,这不会导致无限循环

$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']);
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

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

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