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

Posted

技术标签:

【中文标题】在 while 循环中使用 mysqli_fetch_array 时,PHP/MySQL 如何知道获取下一行?【英文标题】:How does PHP/MySQL know to fetch the next row when using mysqli_fetch_array in a while loop? 【发布时间】:2013-08-28 10:52:57 【问题描述】:

代码如下:

<?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'循环可以遍历表的所有行。谁能给我解释一下?

【问题讨论】:

【参考方案1】:

简单地说:因为它实现了traversable。只需在 PHP 站点上查找mysqli_result class definition,因为它会这样说明。实际上,您也可以通过(正确)实现Iterator 来使用您自己的类来执行此操作,这将允许该类的对象以与 mysqli_result 相同的方式遍历。此外,如果您查看示例下的page for iterator,您会发现如何在 mysqli_result 等类中进行管理的基本模型。

【讨论】:

【参考方案2】:

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

一旦没有更多元素,返回结果为 NULL。 While 控制结构会在返回 NULL 后立即停止进程。

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

【讨论】:

【参考方案3】:

这是因为$r 是一个对象,其中包含有关最新读取行的信息。这适用于streams too。可以想象它有一个内部计数器,每次调用 _fetch_array()_fetch_object() 或类似名称时都会递增。

【讨论】:

以上是关于在 while 循环中使用 mysqli_fetch_array 时,PHP/MySQL 如何知道获取下一行?的主要内容,如果未能解决你的问题,请参考以下文章

js中for循环和while循环在使用的时候有何区别?

在 NodeJS 中使用带有 SQL 请求的 While 循环

在 While 循环中使用 NSDate

如何在 Python 中的另一个 while 循环中正确地创建一个 while 循环?

sql server中do while循环怎么写

使用 VueJS 在 while 循环中更新数据