僅想說明一下,每次呼叫 fetchArray() 都會以陣列形式回傳 SQLite3Result 的下一個結果,直到沒有更多結果為止,此時下一次呼叫 fetchArray() 將會回傳 false。
然而,此時再次呼叫 fetchArray() 將會重置回結果集的開頭,並再次回傳第一個結果。這一點似乎沒有明確記載,並讓我自己頭痛了一段時間,直到我弄清楚為止。
例如
<?php
$returned_set = $database->query("select query 或其他查詢");
//假設查詢回傳了 3 個結果
//通常以下的 while 迴圈會執行 3 次,因為在第四次呼叫 fetchArray() 之前,$result 不會是 false
while($result = $returned_set->fetchArray()) {
//然而,在迴圈中再次呼叫 fetchArray() 將會導致迴圈再次執行
$returned_set->fetchArray();
}
?>
基本上,在上面的程式碼中,fetchArray 將會回傳…
第一次呼叫 | 從 $returned_set 取得的第一個結果(來自 while 條件式中的 fetchArray() 呼叫)
第二次呼叫 | 第二個結果(來自 while 區塊中的 fetchArray() 呼叫)
第三次呼叫 | 第三個結果(來自 while 條件式中的 fetchArray() 呼叫)
第四次呼叫 | FALSE(來自 while 區塊中的 fetchArray() 呼叫)
第五次呼叫 | 第一個結果(來自 while 條件式中的 fetchArray() 呼叫)
....
這將導致(至少在這種情況下)while 迴圈無限執行。