array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'es', ), 'this' => array ( 0 => 'pdostatement.fetch.php', 1 => 'PDOStatement::fetch', ), 'up' => array ( 0 => 'class.pdostatement.php', 1 => 'PDOStatement', ), 'prev' => array ( 0 => 'pdostatement.execute.php', 1 => 'PDOStatement::execute', ), 'next' => array ( 0 => 'pdostatement.fetchall.php', 1 => 'PDOStatement::fetchAll', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'es', 'path' => 'reference/pdo/pdostatement/fetch.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(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
$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.
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().
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.
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.