一个PDOStatement
(你有$users
)是向前光标。这意味着,一旦消耗(第一次foreach
迭代),就不会后退到结果集的开头。
您可以在之后关闭光标,foreach
然后再次执行该语句:
$users = $dbh->query($sql);
foreach ($users as $row) {
print $row["name"] . "-" . $row["sex"] ."<br/>";
}
$users->execute();
foreach ($users as $row) {
print $row["name"] . "-" . $row["sex"] ."<br/>";
}
或者您可以使用量身定制CachingIterator
的Fullcache进行缓存:
$users = $dbh->query($sql);
$usersCached = new CachedPDOStatement($users);
foreach ($usersCached as $row) {
print $row["name"] . "-" . $row["sex"] ."<br/>";
}
foreach ($usersCached as $row) {
print $row["name"] . "-" . $row["sex"] ."<br/>";
}
您会发现本CachedPDOStatement
课程的要点。缓存迭代器可能比将结果集存储到数组中更为理智,因为它仍提供PDOStatement
已包装对象的所有属性和方法。