如果fetch_assoc循环中还有剩余行,如何检查?

时间:2015-05-09 02:23:17

标签: php mysql mysqli

我使用以下代码循环遍历行:

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

但是在mysqli_fetch_assoc检查是否有下一条记录之前怎么可能呢?我的意思是,像:$result->hasNext()

5 个答案:

答案 0 :(得分:4)

使用$ mysqli-> num_rows检查返回行的总数,然后将其与循环中的计数器进行比较,该计数器随每次循环迭代递增。

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

答案 1 :(得分:3)

你做了一段时间的循环,直到你没有剩下任何行,所以问题是你真的需要测试吗?或者你只是在循环结束时运行你想要的代码?如果你需要在里面测试是否会有下一行,你可以这样做:

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

这与你现在正在做的非常相似。

答案 2 :(得分:3)

我更喜欢高效工作,如果不需要,不要编写额外的代码。以下内容可以正常使用:

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

答案 3 :(得分:2)

考虑您发布的代码

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

  //...

}

它已经这样做了。 check out the docs for mysqli_result::fetch_assoc,如果$result->fetch_assoc()返回NULL,则while循环将中断。您无需手动检查任何内容。

答案 4 :(得分:2)

您可以使用@McWayWeb,也可以尝试使用mysqli_next_result()函数。

请阅读此手册: - http://php.net/manual/en/mysqli.next-result.php