Uma
PDOStatement (que você tem em $users ) é um cursor para frente. Isso significa que, uma vez consumido (o primeiro foreach iteração), ele não retrocederá para o início do conjunto de resultados. Você pode fechar o cursor após o
foreach e execute a instrução novamente:$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/>";
}
Ou você pode armazenar em cache usando
CachingIterator personalizado com cache completo:$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/>";
}
Você encontra o
CachedPDOStatement classe como uma essência
. O iterador de cache é provavelmente mais sensato do que armazenar o conjunto de resultados em uma matriz porque ainda oferece todas as propriedades e métodos do PDOStatement objeto que ele envolveu.