当在while循环中使用mysqli_fetch_array时,PHP / MySQL如何知道获取下一行?

时间:2013-08-26 02:37:15

标签: php mysql arrays while-loop row

以下是代码:

<?php
    $q = 'SELECT * FROM categories ORDER BY category'; 
    $r = mysqli_query($dbc,$q);
    while (list($id,$category) = mysqli_fetch_array($r,MYSQLI_NUM)) {
        echo '<li><a href="category.php?id=' . $id . '" title="' . $category . '">' . $category . '</a></li>';
    }
?>

看起来变量名称$ id和$ category被分配给通过循环的每次迭代从数据库中获取的单个行。每次循环重新开始时,都会选择下一行。 我的问题是:如何知道选择表格中的下一行?

这不像行被索引,因此'for'循环可以遍历表的所有行。有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:2)

简单地说:因为它实现了traversable。只需在PHP站点上查找mysqli_result class definition,因为它会说明这一点。实际上,你可以通过(正确)实现Iterator来实现自己的类,这将允许该类的对象以与mysqli_result完全相同的方式遍历。另外,如果您查看示例下的page for iterator,您将找到一个基本的模型,说明如何在类中调用mysqli_result。

答案 1 :(得分:0)

那是因为$r是一个对象,它包含有关最新读取行的信息。这与streams too一起使用。想一想,因为它会有一个内部计数器,每当你拨打_fetch_array()_fetch_object()或类似内容时,它会递增。

答案 2 :(得分:0)

每次调用mysqli_fetch_array后,示例中由$r表示的结果集的内部指针都会增加,因此下一个调用将返回下一个元素。

一旦没有更多元素,返回的结果就是NULL。 While控制结构在返回NULL后会小心停止进程。

结果集基于MySQL查询的输出,不需要表示单个表。