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ął.