【问题标题】:How fetch_assoc know that you want the next row from the table?fetch_assoc 如何知道您想要表中的下一行?
【发布时间】: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 也没有提及。事实上,这是我见过的唯一有解释的地方

标签: php mysql mysqli


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2021-04-14
      相关资源
      最近更新 更多