$data=$stmt->fetchAll(); //Dumping the data shows the result. It is also setting the cursor at the end while($data=$stmt->fetch()) { //Does not enters loop //If fetchAll() removes it work as usual }
我知道它不需要两次获取数据。但是我的主要问题是如何在PDO中重置光标位置?
AFAIK无法使用PDO重置光标位置-这可能与某些数据库的兼容性有关,这些数据库不支持重置内部光标。
如果要对结果进行两次迭代,请将其提取到数组并在此数组上进行迭代:
<?php $results = $stmt->fetchAll(); foreach($results as $row) { // first } foreach($results as $row) { // second }
编辑 某些数据库支持可滚动游标。要使用该PDO::CURSOR_SCROLL标记,prepare请向方法添加标记(请参见PDOFetch文档页面上的示例)。但这只会增加前进或后退的可能性,而不会完全倒带。另外,并非所有数据库都支持该类型的游标(例如MySQL不支持)。
PDO::CURSOR_SCROLL
prepare