# PDOStatement::fetch

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

PDOStatement::fetch — Obtiene la siguiente fila de un conjunto de resultados

### Descripción

public PDOStatement::fetch(int `$mode` = ?, int `$cursorOrientation` = PDO::FETCH_ORI_NEXT, int `$cursorOffset` = 0): mixed

Obtiene una fila de un conjunto de resultados asociado al objeto PDOStatement. El parámetro `mode` determina cómo PDO devuelve la fila.

### Parámetros

`mode`

  Controla cómo se devolverá la siguiente fila al llamador. Este valor debe ser una de las constantes `PDO::FETCH_*`, estando predeterminado `PDO::ATTR_DEFAULT_FETCH_MODE` (el cual por defecto es `PDO::FETCH_BOTH`).

  - `PDO::FETCH_ASSOC`: devuelve un array indexado por los nombres de las columnas del conjunto de resultados.

  - `PDO::FETCH_BOTH` (predeterminado): devuelve un array indexado tanto por nombre de columna, como numéricamente con índice de base 0 tal como fue devuelto en el conjunto de resultados.

  - `PDO::FETCH_BOUND`: devuelve `true` y asigna los valores de las columnas del conjunto de resultados a las variables de PHP a las que fueron vinculadas con el método PDOStatement::bindColumn().

  - `PDO::FETCH_CLASS`: devuelve una nueva instancia de la clase solicitada, haciendo corresponder las columnas del conjunto de resultados con los nombres de las propiedades de la clase, y llamando al constructor después, a menos que también se proporcione `PDO::FETCH_PROPS_LATE`. Si `mode` incluye PDO::FETCH_CLASSTYPE (por ejemplo, `PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE`), entonces el nombre de la clase se determina a partir del valor de la primera columna.

  - `PDO::FETCH_INTO`: actualiza una instancia existente de la clase solicitada, haciendo coincidir el nombre de las columnas con los nombres de las propiedades de la clase.

  - `PDO::FETCH_LAZY`: combina `PDO::FETCH_BOTH` y `PDO::FETCH_OBJ`, creando los nombres de la variables del objeto tal como se accedieron.

  - `PDO::FETCH_NAMED`: devuelve un array con la misma forma que `PDO::FETCH_ASSOC`, excepto que si hubiera múltiples columnas con el mismo nombre, el valor al que hace referencia dicha clave será un array con todos los valores de la fila de tuviera ese nombre de columna.

  - `PDO::FETCH_NUM`: devuelve un array indexado por el número de columna tal como fue devuelto en el conjunto de resultados, comenzando por la columna 0.

  - `PDO::FETCH_OBJ`: devuelve un objeto anónimo con nombres de propiedades que se corresponden a los nombres de las columnas devueltas en el conjunto de resultados.

  - `PDO::FETCH_PROPS_LATE`: cuando se usa con `PDO::FETCH_CLASS`, se llama al constructor de la clase antes de que las proiedades sean asignadas desde los valores de la columna respectiva.

`cursorOrientation`

  Para un objeto PDOStatement que represente un cursor desplazable, este valor determina qué columna será devuelta por el llamador. Este valor debe ser una de las constantes `PDO::FETCH_ORI_*`, siendo la predeterminada `PDO::FETCH_ORI_NEXT`. Para solicitar un cursor desplazable para el objeto PDOStatement, se debe establecer el atributo `PDO::ATTR_CURSOR` a `PDO::CURSOR_SCROLL` cuando se prepare la sentencia SQL con PDO::prepare().

`cursorOffset`

  Para un objeto PDOStatement que represente un cursor desplazable para el cual el parámetro `cursorOrientation` está establecido a `PDO::FETCH_ORI_ABS`, este valor especifica el número absoluto de la fila del conjunto de resultados que se desea obtener.

  Para un objeto PDOStatement que represente un cursor desplazable para el cual el parámetro `cursorOrientation` está establecido a `PDO::FETCH_ORI_REL`, este valor especifica la fila a obtener relativa a la posición del cursor antes de que se llame a PDOStatement::fetch().

### Valores devueltos

El valor de retorno de esta función en caso de éxito depende del tipo de obtención. En todos los casos, se devuelve `false` en caso de error o si no existen más filas por devolver.

### Ejemplos

Ejemplo #1 Obtención de filas usando diferentes tipos de obtención

`<?php
$gsent = $gbd->prepare("SELECT name, colour FROM fruit");
$gsent->execute();
/* Prueba de tipos de PDOStatement::fetch */
print("PDO::FETCH_ASSOC: ");
print("Devolver la siguiente fila como un array indexado por nombre de colunmna\n");
$result = $gsent->fetch(PDO::FETCH_ASSOC);
print_r($result);
print("\n");
print("PDO::FETCH_BOTH: ");
print("Devolver la siguiente fila como un array indexado por nombre y número de columna\n");
$result = $gsent->fetch(PDO::FETCH_BOTH);
print_r($result);
print("\n");
print("PDO::FETCH_LAZY: ");
print("Devolver la siguiente fila como un objeto anónimo con nombres de columna como propiedades\n");
$result = $gsent->fetch(PDO::FETCH_LAZY);
print_r($result);
print("\n");
print("PDO::FETCH_OBJ: ");
print("Devolver la siguiente fila como un objeto anónimo con nombres de columna como propiedades\n");
$result = $gsent->fetch(PDO::FETCH_OBJ);
print $result->name;
print("\n");
?>`

El resultado del ejemplo sería:

    PDO::FETCH_ASSOC: Devolver la siguiente fila como un array indexado por nombre de colunmna
    Array
    (
        [name] => apple
        [colour] => red
    )

    PDO::FETCH_BOTH: Devolver la siguiente fila como un array indexado por nombre y número de columna
    Array
    (
        [name] => banana
        [0] => banana
        [colour] => yellow
        [1] => yellow
    )

    PDO::FETCH_LAZY: Devolver la siguiente fila como un objeto anónimo con nombres de columna como propiedades
    PDORow Object
    (
        [name] => orange
        [colour] => orange
    )

    PDO::FETCH_OBJ: Devolver la siguiente fila como un objeto anónimo con nombres de columna como propiedades
    kiwi

Ejemplo #2 Obtener filas con un cursor desplazable

`<?php
function leerDatosHaciaAdelante($gbd) {
$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET';
try {
$sentencia = $gbd->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$sentencia->execute();
while ($fila = $sentencia->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
$datos = $fila[0] . "\t" . $fila[1] . "\t" . $fila[2] . "\n";
print $datos;
}
$sentencia = null;
}
catch (PDOException $e) {
print $e->getMessage();
}
}
function leerDatosHaciaAtrás($gbd) {
$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet';
try {
$sentencia = $gbd->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$sentencia->execute();
$fila = $sentencia->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
do {
$datos = $fila[0] . "\t" . $fila[1] . "\t" . $fila[2] . "\n";
print $datos;
} while ($fila = $sentencia->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR));
$sentencia = null;
}
catch (PDOException $e) {
print $e->getMessage();
}
}
print "Leyendo hacia adelante:\n";
leerDatosHaciaAdelante($conexión);
print "Leyendo hacia atrás:\n";
leerDatosHaciaAtrás($conexión);
?>`

El resultado del ejemplo sería:

    Reading forwards:
    21    10    5
    16    0     5
    19    20    10

    Reading backwards:
    19    20    10
    16    0     5
    21    10    5

Ejemplo #3 Orden de construcción

Cuando los objetos se obtienen mediante `PDO::FETCH_CLASS`, las propiedades del objeto se asignan primero, y luego se invoca al constructor de la clase. Si también se proporciona `PDO::FETCH_PROPS_LATE`, este orden se invierte, es decir, primero se llama al constructor y luego se asignan las propiedades.

`<?php
class Persona
{
private $name;
public function __construct()
{
$this->decir();
}
public function decir()
{
if (isset($this->name)) {
echo "Soy {$this->name}.\n";
} else {
echo "Aún no tengo nombre.\n";
}
}
}
$sth = $dbh->query("SELECT * FROM people");
$sth->setFetchMode(PDO::FETCH_CLASS, 'Persona');
$persona = $sth->fetch();
$persona->decir();
$sth->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Persona');
$persona = $sth->fetch();
$persona->decir();
?>`

El resultado del ejemplo sería algo similar a:

    Soy Alice.
    Soy Alice.
    Aún no tengo nombre.
    Soy Bob.

### Ver también

- PDO::prepare() - Prepara una sentencia para su ejecución y devuelve un objeto sentencia
- PDOStatement::execute() - Ejecuta una sentencia preparada
- PDOStatement::fetchAll() - Devuelve un array que contiene todas las filas del conjunto de resultados
- PDOStatement::fetchColumn() - Devuelve una única columna de la siguiente fila de un conjunto de resultados
- PDOStatement::fetchObject() - Obtiene la siguiente fila y la devuelve como un objeto
- PDOStatement::setFetchMode() - Establece el modo de obtención para esta sentencia