PDOStatement::fetchAll

(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)

PDOStatement::fetchAll Devuelve un array que contiene todas las filas del conjunto de resultados

Descripción

public PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] ) : array

Parámetros

fetch_style

Controla el contenido del array devuelto, tal como está documentado en PDOStatement::fetch(). El valor predeterminado es PDO::ATTR_DEFAULT_FETCH_MODE (el cual por defecto es PDO::FETCH_BOTH).

Para devolver un array que contenga todos los valores de una única columna del conjunto de resultados, se debe especificar PDO::FETCH_COLUMN. Se puede especificar qué columna se desea obtener con el parámetro fetch_argument.

Para obtener solamente los valores únicos de una sola columna del conjunto de resultados, se ha de realizar un OR a nivel de bits de PDO::FETCH_COLUMN con PDO::FETCH_UNIQUE.

Para devolver un array asociativo agrupado según los valores de una columna especificada, se ha de realilar un OR a nivel de bits de PDO::FETCH_COLUMN con PDO::FETCH_GROUP.

fetch_argument

Este argumento tiene un significado diferente dependiendo del valor del parámetro fetch_style:

  • PDO::FETCH_COLUMN: Devuelve la columna con el índice indicado basado en 0.

  • PDO::FETCH_CLASS: Devuelve instancias de la clase especificada, haciendo corresponder las columnas de cada fila con las propiedades con nombre de la clase.

  • PDO::FETCH_FUNC: Devuelve el resultado de llamar a la función especificada, usando cada columna de fila como parámetro de la llamada.

ctor_args

Los argumentos del constructor de la case cuando el parámetro fetch_style es PDO::FETCH_CLASS.

Valores devueltos

PDOStatement::fetchAll() devuelve un array que contiene todas las filas restantes del conjunto de resultados. El array representa cada fila como un array con valores de las columnas, o como un objeto con propiedades correspondientes a cada nombre de columna. Es devuelto un array vacío si hay cero resultados que obtener, o FALSE en caso de fallo.

Usar este método para obtener conjuntos de resultados grandes dará como resultado una fuerte demanda del sistema y, posiblemente, de los recursos de red. En lugar de recuperar todos los datos y manipularlos en PHP, considérese usar el servidor de bases de datos para manipular los conjuntos de resultados. Por ejemplo, se pueden usar las cláusulas WHERE y ORDER BY en sentencias SQL para restringir el resultado antes de recuperarlos y procesarlos con PHP.

Ejemplos

Ejemplo #1 Obtener todas las filas restantes de un conjunto de resultados

<?php
$gsent 
$gbd->prepare("SELECT name, colour FROM fruit");
$gsent->execute();

/* Obtener todas las filas restantes del conjunto de resultados */
print("Obtener todas las filas restantes del conjunto de resultados:\n");
$resultado $gsent->fetchAll();
print_r($resultado);
?>

El resultado del ejemplo sería algo similar a:

Obtener todas las filas restantes del conjunto de resultados:
Array
(
    [0] => Array
        (
            [name] => pear
            [0] => pear
            [colour] => green
            [1] => green
        )

    [1] => Array
        (
            [name] => watermelon
            [0] => watermelon
            [colour] => pink
            [1] => pink
        )

)

Ejemplo #2 Obtener todos los valores de una única columna de un conjunto de resultados

El siguiente ejemplo demuestra cómo devolver todos los valores de una única columna de un conjunto de resultados, incluso si la sentencia SQL podría devolver múltiples columnas por cada fila.

<?php
$gsent 
$gbd->prepare("SELECT name, colour FROM fruit");
$gsent->execute();

/* Obtener todos los valores de la primera columna */
$resultado $gsent->fetchAll(PDO::FETCH_COLUMN0);
var_dump($resultado);
?>

El resultado del ejemplo sería algo similar a:

Array(3)
(
    [0] =>
    string(5) => apple
    [1] =>
    string(4) => pear
    [2] =>
    string(10) => watermelon
)

Ejemplo #3 Agrupar todos los valores según una única columna

El siguiente ejemplo demuestra cómo devolver un array asociativo agrupado según los valores de la columna especificada del conjunto de resultados. El array contiene tres claves: los valores apple y pear son devueltos como arrays que contienen dos colores diferentes, mientras que watermelon es devuelto como un array que contiene un solo color.

<?php
$insert 
$gbd->prepare("INSERT INTO fruit(name, colour) VALUES (?, ?)");
$insert->execute(array('apple''green'));
$insert->execute(array('pear''yellow'));

$gsent $gbd->prepare("SELECT name, colour FROM fruit");
$gsent->execute();

/* Agrupar valores según la primera columna */
var_dump($gsent->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));
?>

El resultado del ejemplo sería algo similar a:

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"
  }
}

Ejemplo #4 Instanciar una clase para cada resultado

El siguiente ejemplo demuestra el comportamiento del estilo de obtención de PDO::FETCH_CLASS.

<?php
class fruit {
    public 
$name;
    public 
$colour;
}

$gsent $gbd->prepare("SELECT name, colour FROM fruit");
$gsent->execute();

$resultado $gsent->fetchAll(PDO::FETCH_CLASS"fruit");
var_dump($resultado);
?>

El resultado del ejemplo sería algo similar a:

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"
  }
}

Ejemplo #5 Invocar a una función por cada resultado

El siguiente ejemplo demuestra el comportamiento del estilo de obtención de PDO::FETCH_FUNC.

<?php
function fruit($name$colour) {
    return 
"{$name}{$colour}";
}

$gsent $gbd->prepare("SELECT name, colour FROM fruit");
$gsent->execute();

$resultado $gsent->fetchAll(PDO::FETCH_FUNC"fruit");
var_dump($resultado);
?>

El resultado del ejemplo sería algo similar a:

array(3) {
  [0]=>
  string(12) "apple: green"
  [1]=>
  string(12) "pear: yellow"
  [2]=>
  string(16) "watermelon: pink"
}

Ver también