fetch_assoc 如何知道您想要表中的下一行?

Posted

技术标签:

【中文标题】fetch_assoc 如何知道您想要表中的下一行?【英文标题】:How fetch_assoc know that you want the next row from the table? 【发布时间】:2017-11-12 21:04:01 【问题描述】:

如果我们有这样的代码:

$result = $conn->query('SELECT username FROM users');
$row1 = $result->fetch_assoc();
echo $row1['username'], '<br>';
$row2 = $result->fetch_assoc();
echo $row2['username'], '<br>';

第二次回显会显示表中第二行的用户名,但为什么呢? fetch_assoc() 如何知道您想要下一行作为回报。它是否有一些内置的计数器来计算它被调用的次数?

【问题讨论】:

每次fetch_assoc() 都会返回当前行并自动前进到下一行。 这个php.net/manual/en/mysqli-result.fetch-assoc.php有说明书,你没看过吗? 我一直在想这个问题。我很难理解这种方法,因为它似乎像魔术一样起作用。谢谢你的提问! 还有@FunkFortyNiner,该手册没有说明指针自动前进。 w3schools 也没有提及。事实上,这是我见过的唯一有解释的地方 【参考方案1】:

它保存一个指向返回行列表的指针。当查询返回数据时(即创建结果对象时),它会检索查询返回的所有行。

> row1 foo bar
  row2 baz boo
  row3 tst tmp

调用fetch_assoc时,返回指针指向的行,指针前进:

return_val = (row1, foo, bar)
increment pointer

  row1 foo bar
> row2 baz boo
  row3 tst tmp

return return_val    

重复此操作,直到没有更多内容可返回。 fetch_assoc 然后永远返回 null。

最后一部分允许您在while 循环中自动使用它:

while ($row = $result->fetch_assoc()) 
    // do something with $row

fetch_assoc 返回 null 时,while 循环终止并在循环外继续执行 - 并且已读取完整的结果集。

【讨论】:

【参考方案2】:
    while 循环运行,除非定义的条件不为 false。 fetch_assoc() 函数将在获取前一行后将其指针指向下一行。当行数用完时,它返回 null,并且 null 的计算结果始终为 false,因此,while 循环停止执行,程序继续执行。

【讨论】:

以上是关于fetch_assoc 如何知道您想要表中的下一行?的主要内容,如果未能解决你的问题,请参考以下文章

使用 POI 从 Excel 工作表中的下一行获取值

如果选中(可可),您将如何使复选框删除表中的一行?

在SQL中将一行值移动到另一行

如何使用textview移动到表格视图中的下一个单元格/行

如何指向链表中的下一个节点并打印该值

如何选择(所有)表 1 中的一行,该行具有与表 2 相同的另一行