【问题标题】:Why is the expression in this while loop causing an infinite loop?为什么这个while循环中的表达式会导致无限循环?
【发布时间】:2011-09-26 09:12:12
【问题描述】:

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

【问题讨论】:

  • 因为首先您每次都在查询数据库。如果有行,那么它将始终为“true”。

标签: php mysql pdo prepared-statement


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    while 循环中带括号的语句每次都会被执行。这意味着您的查询每次都重新开始,因此您总是在查看第一个对象,因此是无限循环!

    第二个更正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2018-03-17
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多