Ein PDOStatement
(die Sie in $users
haben ) ist ein Vorwärts-Cursor. Das heißt, einmal verbraucht (der erste foreach
Iteration), wird nicht zum Anfang der Ergebnismenge zurückgespult.
Sie können den Cursor nach dem foreach
schließen und führen Sie die Anweisung erneut aus:
$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/>";
}
Oder Sie könnten mit angepasstem CachingIterator
zwischenspeichern mit vollem Cache:
$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/>";
}
Sie finden das CachedPDOStatement
Klasse als Kern
. Der Caching-Iterator ist wahrscheinlich vernünftiger als das Speichern der Ergebnismenge in einem Array, da er immer noch alle Eigenschaften und Methoden des PDOStatement
bietet Objekt, das es umhüllt hat.