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

在while循环中使用mysqli_fetch_数组时,PHP/MySQL如何知道如何获取下一行?,php,mysql,arrays,while-loop,row,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="' . $

代码如下:

<?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”循环就可以单步遍历表中的所有行。有人能给我解释一下吗?

那是因为
$r
是一个对象,其中包含有关最新读取行的信息。这是我们的工作。想象一下,它会有一个内部计数器,每次调用
\u fetch\u array()
\u fetch\u object()
或类似的函数时,它都会递增。

简单地说:因为它实现了。只需在PHP网站上查找,因为它会这样说。实际上,您也可以通过(正确地)实现自己的类来实现这一点,这将允许该类的对象以与mysqli_结果相同的方式进行遍历。另外,如果您查看下面的示例,您会发现一个基本的模型,说明如何在一个类(如mysqli_result)中管理它。

每次调用mysqli_fetch_数组后,示例中由
$r
表示的resultset的内部指针都会增加,因此下一次调用返回下一个元素

一旦没有更多的元素,返回的结果为空
While
一旦返回NULL,控制结构会注意停止进程

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