Una PDOStatement
(que tienes en $users
) es un cursor de avance. Eso significa que, una vez consumido (el primer foreach
iteración), no retrocederá hasta el principio del conjunto de resultados.
Puede cerrar el cursor después de foreach
y ejecute la instrucción de nuevo:
$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/>";
}
O puede almacenar en caché usando CachingIterator
personalizado con un caché 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/>";
}
Usted busque la CachedPDOStatement
clase como esencia
. El iterador de almacenamiento en caché es probablemente más sensato que almacenar el conjunto de resultados en una matriz porque aún ofrece todas las propiedades y métodos de PDOStatement
objeto que ha envuelto.