Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP PDO mit foreach und fetch

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.