En PDOStatement
(som du har i $users
) är en framåtmarkör. Det betyder att en gång konsumerat (den första foreach
iteration), spolas den inte tillbaka till början av resultatuppsättningen.
Du kan stänga markören efter foreach
och kör satsen 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 så kan du cache med hjälp av skräddarsydd CachingIterator
med en fullcache:
$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 hittar CachedPDOStatement
klass som en sammanfattning
. Caching-iteratorn är förmodligen mer förnuftig än att lagra resultatuppsättningen i en array eftersom den fortfarande erbjuder alla egenskaper och metoder för PDOStatement
objekt som det har lindat.