Почему выражение в этом цикле while вызывает бесконечный цикл? - PullRequest
0 голосов
/ 26 сентября 2011

Новичок в работе и просто удивляюсь, почему это вызывает бесконечный цикл:

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

Ответы [ 2 ]

5 голосов
/ 26 сентября 2011

В первом примере кода вы повторно запускаете запрос в цикле, каждый раз выбирая только первую строку.

Во втором примере кода вы сначала запускаете запрос один раз перед началом цикла.Затем вы выполняете цикл, выбирая каждую строку в наборе результатов, пока не останется больше строк.

3 голосов
/ 26 сентября 2011

Оператор в скобках в цикле while выполняется каждый раз. Это означает, что ваш запрос запускается каждый раз, так что вы всегда смотрите на первый объект и так бесконечный цикл!

Второй способ более правильный.

...