PDOStatement
(které máte v $users
) je dopředný kurzor. To znamená, že jakmile je spotřebován (první foreach
iterace), nepřetočí se na začátek sady výsledků.
Po foreach
můžete kurzor zavřít a proveďte příkaz znovu:
$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/>";
}
Nebo můžete ukládat do mezipaměti pomocí přizpůsobeného CachingIterator
s plnou 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/>";
}
najdete CachedPDOStatement
třída jako podstata
. Iterátor ukládání do mezipaměti je pravděpodobně rozumnější než ukládání sady výsledků do pole, protože stále nabízí všechny vlastnosti a metody PDOStatement
objekt, který má zabalený.