2011-09-26 157 views
0

新來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']); 
} 
+0

因爲在第一次你每次都在查詢數據庫。如果有行,那麼它總是「真」。 –

回答

5

在第一個代碼示例你重新運行在循環中重複查詢,每次只讀取第一行。

在第二個代碼示例中,首先在循環開始之前運行查詢一次。然後循環,獲取結果集中的每一行,直到沒有更多行。

3

while循環中的括號語句每次都執行。這意味着你的查詢每次都會開始,所以你總是看着第一個對象,並且如此無限循環!

第二種方法更正確。

相關問題