PDOStatement::fetchAll
Manual de referencia de PHP PDO
PDOStatement::fetchAll — Devuelve un array que contiene todas las filas del conjunto de resultados (PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
Descripción
Sintaxis
array PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )
Parámetros
fetch_style
Controla cómo se devuelve la siguiente fila al llamador. Este valor debe ser una de las constantes de la serie PDO::FETCH_*, por defecto es el valor de PDO::ATTR_DEFAULT_FETCH_MODE (por defecto PDO::FETCH_BOTH).
Si desea devolver un array que contenga todos los valores de una sola columna del conjunto de resultados, especifique PDO::FETCH_COLUMN. Obtenga la columna deseada especificando el parámetro column-index.
Si desea obtener los valores únicos de una sola columna del conjunto de resultados, combine PDO::FETCH_COLUMN y PDO::FETCH_UNIQUE con un OR bit a bit.
Si desea devolver un array asociativo con valores agrupados según una columna especificada, combine PDO::FETCH_COLUMN y PDO::FETCH_GROUP con un OR bit a bit.
fetch_argument
Dependiendo del valor del parámetro fetch_style, este parámetro tiene diferentes significados:
-
PDO::FETCH_COLUMNDevuelve la columna especificada, indexada desde 0. -
PDO::FETCH_CLASSDevuelve una instancia de la clase especificada, mapeando las columnas de cada fila a los nombres de atributos correspondientes en la clase. -
PDO::FETCH_FUNCPasa las columnas de cada fila como argumentos a la función especificada y devuelve el resultado de llamar a la función.
ctor_args
Los argumentos del constructor de la clase personalizada cuando el parámetro fetch_style es PDO::FETCH_CLASS.
Valor de retorno
PDOStatement::fetchAll() devuelve un array que contiene todas las filas restantes del conjunto de resultados. Cada fila de este array es o bien un array de valores de columna, o bien un objeto con propiedades correspondientes a cada nombre de columna.
Usar este método para recuperar conjuntos de resultados grandes aumentará la carga del sistema y puede consumir muchos recursos de red. En lugar de recuperar todos los datos y luego manipularlos con PHP, considere usar el servicio de base de datos para procesar el conjunto de resultados. Por ejemplo, use las cláusulas WHERE y ORDER BY en SQL para limitar el resultado antes de recuperar los datos y procesarlos con PHP.
Ejemplos
Obtener todas las filas restantes del conjunto de resultados
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* 获取结果集中所有剩余的行 */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
?>
La salida del ejemplo anterior es:
Fetch all of the remaining rows in the result set:
Array
(
[0] => Array
(
[NAME] => pear
[0] => pear
[COLOUR] => green
[1] => green
)
[1] => Array
(
[NAME] => watermelon
[0] => watermelon
[COLOUR] => pink
[1] => pink
)
)
Obtener todos los valores de una sola columna del conjunto de resultados
El siguiente ejemplo demuestra cómo devolver todos los valores de una sola columna de un conjunto de resultados, aunque la propia sentencia SQL pueda devolver varias columnas por fila.
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* 获取第一列所有值 */
$result = $sth->fetchAll(PDO::FETCH_COLUMN, 0);
var_dump($result);
?>
La salida del ejemplo anterior es:
Array(3)
(
[0] =>
string(5) => apple
[1] =>
string(4) => pear
[2] =>
string(10) => watermelon
)
Agrupar todos los valores según una sola columna
El siguiente ejemplo demuestra cómo devolver un array asociativo agrupado por los valores de la columna especificada en el conjunto de resultados. Este array contiene tres claves: los arrays apple y pear devueltos contienen dos colores diferentes, mientras que el array watermelon devuelto contiene solo un color.
<?php
$insert = $dbh->prepare("INSERT INTO fruit(name, colour) VALUES (?, ?)");
$insert->execute(array('apple', 'green'));
$insert->execute(array('pear', 'yellow'));
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* 根据第一列分组 */
var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));
?>
La salida del ejemplo anterior es:
array(3) {
["apple"]=>
array(2) {
[0]=>
string(5) "green"
[1]=>
string(3) "red"
}
["pear"]=>
array(2) {
[0]=>
string(5) "green"
[1]=>
string(6) "yellow"
}
["watermelon"]=>
array(1) {
[0]=>
string(5) "green"
}
}
Instanciar una clase para cada fila de resultados
El siguiente ejemplo demuestra el comportamiento del estilo de obtención PDO::FETCH_CLASS.
<?php
class fruit {
public $name;
public $colour;
}
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit");
var_dump($result);
?>
La salida del ejemplo anterior es:
array(3) {
[0]=>
object(fruit)#1 (2) {
["name"]=>
string(5) "apple"
["colour"]=>
string(5) "green"
}
[1]=>
object(fruit)#2 (2) {
["name"]=>
string(4) "pear"
["colour"]=>
string(6) "yellow"
}
[2]=>
object(fruit)#3 (2) {
["name"]=>
string(10) "watermelon"
["colour"]=>
string(4) "pink"
}
}
Llamar a una función por cada fila
El siguiente ejemplo demuestra el comportamiento del estilo de obtención PDO::FETCH_FUNC.
<?php
function fruit($name, $colour) {
return "{$name}: {$colour}";
}
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_FUNC, "fruit");
var_dump($result);
?>
La salida del ejemplo anterior es:
array(3) {
[0]=>
string(12) "apple: green"
[1]=>
string(12) "pear: yellow"
[2]=>
string(16) "watermelon: pink"
}
Otras extensiones