En PDOStatement
(som du har i $users
) er en fremad-markør. Det betyder, når den er forbrugt (den første foreach
iteration), spole den ikke tilbage til begyndelsen af resultatsættet.
Du kan lukke markøren efter foreach
og kør sætningen igen:
$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/>";
}
Eller du kan cache ved at bruge skræddersyet CachingIterator
med en fuld 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/>";
}
Du finder CachedPDOStatement
klasse som en essens
. Caching-iteratoren er sandsynligvis mere fornuftig end at gemme resultatsættet i et array, fordi det stadig tilbyder alle egenskaber og metoder for PDOStatement
objekt, den har pakket ind.