sql >> Base de Datos >  >> RDS >> Mysql

PHP PDO con foreach y fetch

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.