Un PDOStatement
(che hai in $users
) è un cursore in avanti. Ciò significa che, una volta consumato (il primo foreach
iterazione), non verrà riavvolto all'inizio del set di risultati.
Puoi chiudere il cursore dopo il foreach
ed eseguire nuovamente l'istruzione:
$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/>";
}
Oppure puoi memorizzare nella cache utilizzando CachingIterator
personalizzato con una cache piena:
$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/>";
}
trovi il CachedPDOStatement
classe come sostanza
. L'iteratore di memorizzazione nella cache è probabilmente più sano di memorizzare il set di risultati in un array perché offre ancora tutte le proprietà e i metodi di PDOStatement
oggetto che ha avvolto.