PDOStatement
(które masz w $users
) jest kursorem do przodu. Oznacza to, że po spożyciu (pierwszy foreach
iteracji), nie zostanie przewinięty do początku zestawu wyników.
Możesz zamknąć kursor po foreach
i ponownie wykonaj instrukcję:
$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/>";
}
Lub możesz buforować za pomocą dostosowanego CachingIterator
z pełną pamięcią podręczną:
$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/>";
}
znajdziesz CachedPDOStatement
klasa jako istota
. Iterator buforowania jest prawdopodobnie bardziej rozsądny niż przechowywanie zestawu wyników w tablicy, ponieważ nadal oferuje wszystkie właściwości i metody PDOStatement
obiekt, który zawinął.