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 如何知道您想要表中的下一行?的主要内容,如果未能解决你的问题,请参考以下文章