Een PDOStatement
(die je hebt in $users
) is een voorwaartse cursor. Dat betekent dat, eenmaal geconsumeerd (de eerste foreach
iteratie), zal het niet terugspoelen naar het begin van de resultatenset.
U kunt de cursor sluiten na de foreach
en voer de instructie opnieuw uit:
$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/>";
}
Of u kunt cachen met behulp van op maat gemaakte CachingIterator
met een volledige 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/>";
}
Je vindt de CachedPDOStatement
klasse als kern
. De caching-iterator is waarschijnlijk verstandiger dan het opslaan van de resultaatset in een array, omdat het nog steeds alle eigenschappen en methoden van de PDOStatement
biedt object dat het heeft ingepakt.