PDOStatement (yang Anda miliki di $users ) adalah kursor-maju. Artinya, setelah dikonsumsi (foreach pertama] iterasi), itu tidak akan mundur ke awal kumpulan hasil.
Anda dapat menutup kursor setelah foreach dan jalankan pernyataan lagi:
$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/>";
}
Atau Anda dapat melakukan cache menggunakan CachingIterator yang disesuaikan dengan cache penuh:
$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/>";
}
Anda menemukan CachedPDOStatement kelas sebagai inti
. Iterator caching mungkin lebih waras daripada menyimpan set hasil ke dalam array karena masih menawarkan semua properti dan metode PDOStatement objek yang telah dibungkusnya.