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

时间:2017-11-12 21:04:01

标签: php mysql mysqli

如果我们有这样的代码:

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

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

1 个答案:

答案 0 :(得分:3)

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

> 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循环终止并在循环外继续执行 - 并且已读取完整的结果集。