再会。我真的不明白为什么我fetchAll()
只能使用1次?第二次,返回一个空数组。
$statement = $pdo->query($someSql);
$a = $statement->fetchAll();
$b = $statement->fetchAll(); // empty array
为什么会这样?毕竟,正如我理解的正确,查询的结果(结果集)存储在$statement
执行后query()
?是什么阻止你再次获得它?
再会。我真的不明白为什么我fetchAll()
只能使用1次?第二次,返回一个空数组。
$statement = $pdo->query($someSql);
$a = $statement->fetchAll();
$b = $statement->fetchAll(); // empty array
为什么会这样?毕竟,正如我理解的正确,查询的结果(结果集)存储在$statement
执行后query()
?是什么阻止你再次获得它?
根据文件:
注意“剩余”这个词,然后想:
你运行了第一个
fetchAll
,它返回了集合中的所有记录。还剩下什么?没什么,是空的。
这正是第二个将返回的内容
fetchAll
。因为 PDO
fetchAll
选择剩余的记录。因此,此类记录的第一次通过后不会保留。为了使用此方法重新选择数据,您必须将当前光标位置返回到记录的开头。默认情况下,光标以“仅向前”模式打开PDO::CURSOR_FWDONLY
。您可以通过将光标设置为来更改此行为
PDO::CURSOR_SCROLL
。但是,应该记住 MySQL 直到最近才支持游标,并且尝试在其上执行此操作将以失败告终。因此,将记录存储在中间存储中或在游标关闭后重试查询会更安全
$statement->closeCursor()
。因为这样的代码没有丝毫意义。
收到数组一次后,您可以随意使用它,而无需访问该层来使用数据库。