PHP 8.4.22 Released!

PDOStatement::setFetchMode

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

PDOStatement::setFetchMode Establece el modo de recuperación por defecto para esta consulta

Descripción

public function PDOStatement::setFetchMode(int $mode): true
public function PDOStatement::setFetchMode(int $mode = PDO::FETCH_COLUMN, int $colno): true
public function PDOStatement::setFetchMode(int $mode = PDO::FETCH_CLASS, string $class, ?array $constructorArgs = null): true
public function PDOStatement::setFetchMode(int $mode = PDO::FETCH_INTO, object $object): true

Parámetros

mode

El modo de recuperación debe ser una de las constantes PDO::FETCH_*.

colno

Número de la columna.

class

Nombre de la clase.

constructorArgs

Argumentos del constructor.

object

Objeto.

Valores devueltos

Retorna siempre true.

Historial de cambios

Versión Descripción
8.4.0 El tipo de retorno es ahora true, anteriormente era bool.

Ejemplos

Ejemplo #1 Definición del modo de recuperación

El siguiente ejemplo muestra cómo PDOStatement::setFetchMode() modifica el modo de recuperación por defecto para un objeto PDOStatement.

<?php
$stmt
= $dbh->query('SELECT name, colour, calories FROM fruit');
$stmt->setFetchMode(PDO::FETCH_NUM);
foreach (
$stmt as $row) {
print
$row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
}
?>

Resultado del ejemplo anterior es similar a:

apple   red     150
banana  yellow  250
orange  orange  300
kiwi    brown   75
lemon   yellow  25
pear    green   150

add a note

User Contributed Notes 3 notes

up
35
Dormilich at netscape dot net
15 years ago
if you want to fetch your result into a class (by using PDO::FETCH_CLASS) and want the constructor to be executed *before* PDO assings the object properties, you need to use the PDO::FETCH_PROPS_LATE constant:

<?php
$stmt = $pdo->prepare("your query");

$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, "className", $constructorArguments);

# pass parameters, if required by the query
$stmt->execute($parameters);

foreach ($stmt as $row)
{
    // do something with (each of) your object
}
?>
up
9
Kats
8 years ago
Something very helpful is knowing how to access namespaces from the function. It took me a minute (and Google) to figure out. The ::class property is going to be your best friend in this case.

<?php
$stmt->setFetchMode(PDO::FETCH_CLASS, Name\Space\Class::class);
?>
up
2
stein_AT_rhrk.uni-kl.de
18 years ago
Some note on PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE

It took me some time, to realize, that you can not use this fetch-mode in $stm->setFetchMode(), when you want to retrieve objects from the database whereas the type is defined by the first column in the resultset.
You have to define this mode directly in the $stm->fetch() method.

To make it clearer:

$stm = $pdo->query("SELECT * FROM `foo`);
$stm->setFetchMode(FETCH_CLASS | PDO :: FETCH_CLASSTYPE);

$object = $stm->fetch();

Will not return the expected object, whereas

$stm = $pdo->query("SELECT * FROM `foo`");

$object = $stm->fetch(FETCH_CLASS | PDO :: FETCH_CLASSTYPE);

will give you the object of the class, defined in the first column of `foo`.
To Top