2015-05-09 24 views
4

我環槽的行與此代碼:如何檢查fetch_assoc循環中是否還有行?

while ($row = $result->fetch_assoc()) { 
    //... 
} 

但怎麼可能之前mysqli_fetch_assoc,以檢查是否會出現下一個記錄,或者不是?我的意思是,例如:$result->hasNext()

+0

簡單。在循環之前使用'$ cnt = $ result-> num_rows;'。接下來在你的循環中'$ cnt - ;'並且'$ cnt'將總是包含剩下的行數。 – icecub

回答

4

使用$ mysqli-> num_rows檢查返回的行的總數,然後將其與循環中的計數器進行比較,每次循環迭代都會增加一個計數器。

$row_cnt = $result->num_rows; 
$loop_ct = 0; 
while($row = $result->fetch_assoc()) { 
    if(++$loop_ct < $row_cnt) { 
     //do something 
    } 
} 
+0

謝謝。但是,我認爲遞減row_cnt是一種智能的方式 –

2

考慮你的代碼發佈

while ($row = $result->fetch_assoc()) { 

    //... 

} 

它已經這樣做。 check out the docs for mysqli_result::fetch_assoc,如果$result->fetch_assoc()返回NULL,則while循環將中斷。你不需要手動檢查任何東西。

+0

。但是我想在檢查下一行 –

3

你做一個while循環,直到你沒有留下任何行呢,所以這個問題是你真的需要一個測試或者你只是運行你的代碼想在你的循環結束?如果您需要測試是否會有下一行,您可以這樣做:

$row = $result->fetch_assoc(); 
while (1) { 
    ... 
    if (!$row = $result->fetch_assoc()) { 
     // No next row 
     break; 
    } 
} 

這與您現在正在做的事很相似。

+0

之前檢查它,但是使用fetch assoc迭代到下一行,我希望避免。我只想檢查一下,如果有剩餘行數 –

+1

也許可以讓我們更深入地瞭解你的目標是什麼,也許我可以給出更好的建議。 – Devon

+0

@IterAtor我敢打賭,如果你告訴我們你想達到的目標,還有更好的方法, – 2015-05-09 02:40:09

3

我更喜歡高效地工作,如果不需要,不要編寫額外的代碼。以下將工作得很好:

$cnt = $result->num_rows; 
while($row = $result->fetch_assoc()){ 
    //.... 
    $cnt--; 
    if($cnt == x){ //Where x is the number you want 
     //.... 
    } 
} 
相關問題