如果我们有这样的代码:
$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()如何知道您希望返回下一行。它是否有一个内置的计数器来计算它被调用的次数?
答案 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循环终止并在循环外继续执行 - 并且已读取完整的结果集。