2015-05-09 74 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 
     //.... 
    } 
} 
相关问题