Véase constantes de cursor para las
constantes de cursor PDO::FETCH_ORI_*.
| Modo de recuperación | Resumen |
|---|---|
PDO::FETCH_DEFAULT
|
Valor especial para usar el modo de recuperación por omisión actual. |
PDO::FETCH_ASSOC
|
Array indexado solo por el nombre de la columna. |
PDO::FETCH_BOTH (Default)
|
Array indexado tanto por el número de columna como por el nombre. |
PDO::FETCH_NAMED
|
Variante de PDO::FETCH_ASSOC que conserva las
columnas duplicadas.
|
PDO::FETCH_NUM
|
Array indexado solo por el número de columna. |
PDO::FETCH_COLUMN
|
Una sola columna. |
PDO::FETCH_KEY_PAIR
|
Pares clave-valor, indexados por la primera columna. |
PDO::FETCH_FUNC
|
Una una función para crear el valor de retorno. (solamente con PDOStatement::fetchAll()) |
PDO::FETCH_OBJ
|
Objeto anónimo (stdClass). |
PDO::FETCH_CLASS
|
Un objeto de la clase especificada. |
Estos modos se utilizan para implementar opciones al usar
PDO::FETCH_CLASS.
| Modo de recuperación | Resumen |
|---|---|
PDO::FETCH_CLASSTYPE
|
Usa la primera columna como nombre de la clase. |
PDO::FETCH_PROPS_LATE
|
Llama al constructor antes de establecer las propiedades. |
PDO::FETCH_SERIALIZE
|
Usa datos serializados de PHP. Obsoleto a partir de PHP 8.1.0. |
Los siguientes modos no pueden ser utilizados con PDOStatement::fetchAll().
| Modo de recuperación | Resumen |
|---|---|
PDO::FETCH_BOUND
|
Asigna valores a las variables especificadas. |
PDO::FETCH_INTO
|
Actualiza un objeto existente. |
PDO::FETCH_LAZY
|
Recuperación diferida mediante PDORow para acceso similar a arrays y objetos. |
Los siguientes modos especiales para resultados múltiples solo funcionan con PDOStatement::fetchAll() y no funcionan con algunos otros modos de recuperación. Consulta la documentación completa para más detalles.
| Modo de recuperación | Resumen |
|---|---|
PDO::FETCH_GROUP
|
Los resultados se agrupan por la primera columna. |
PDO::FETCH_UNIQUE
|
Los resultados se indexan (únicamente) por la primera columna. |
Es posible que los resultados contengan varias columnas con el mismo nombre. Por ejemplo, al combinar dos tablas que contienen una columna con el mismo nombre.
Debido a que las estructuras de PHP, como los arrays y los objetos, no admiten varias claves o propiedades con el mismo nombre, el array o el objeto devuelto contendrá solo uno de los valores con el mismo nombre.
El valor que se devuelve para un nombre duplicado determinado debe considerarse indefinido.
Para evitar este problema, asigne nombres explícitos a las columnas mediante un alias. Por ejemplo:
SELECT table1.created_at AS t1_created_at,
table2.created_at AS t2_created_at
FROM table1
JOIN table2 ON table1.table2id = table2.id
Véase también PDO::FETCH_NAMED,
PDO::ATTR_FETCH_TABLE_NAMES y
PDO::ATTR_FETCH_CATALOG_NAMES.
Se puede establecer el modo de recuperación predeterminado para todas las consultas usando
PDO::ATTR_DEFAULT_FETCH_MODE con
PDO::__construct() o
PDO::setAttribute().
Se puede establecer el modo de recuperación predeterminado para una sentencia específica usando PDOStatement::setFetchMode(). Esto afecta a la reutilización como sentencia preparada y a la iteración (usando foreach).
PDOStatement::setAttribute() no se puede usar para establecer el modo de recuperación predeterminado. Solo acepta atributos específicos del controlador y, de forma silenciosa, ignora los atributos que no reconoce.
Disponible desde PHP 8.0.7.
Este es un valor especial que utiliza el modo de recuperación predeterminado actual para un
PDOStatement. Es especialmente útil como valor predeterminado
para los parámetros de método al extender
PDOStatement para su uso con
PDO::ATTR_STATEMENT_CLASS.
Este valor no se puede usar con
PDO::ATTR_DEFAULT_FETCH_MODE.
PDO::FETCH_ASSOC devuelve un array indexada únicamente por
nombre de columna.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_ASSOC);
print_r($row);El ejemplo anterior mostrará:
Array
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
Este es el modo de recuperación predeterminado.
PDO::FETCH_BOTH devuelve un array indexada tanto por número
de columna como por nombre. Esto significa que cada valor devuelto se duplica para cada
fila de resultados.
El número de columna comienza en 0 y se determina por el orden de las columnas de la consulta, no (por ejemplo) por el orden en que se definen las columnas en la tabla.
Nota:
No se recomienda utilizar el índice de columna numérico, ya que esto puede cambiar cuando se cambie la consulta, o cuando se cambie el esquema de la tabla al usar
SELECT *.
Nota:
Es posible que el número de entradas indexadas por nombre no coincida con el número de entradas indexadas por número en los casos en que varias columnas devueltas utilicen el mismo nombre.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_BOTH);
print_r($row);El ejemplo anterior mostrará:
Array
(
[id] => 104,
[0] => 104,
[name] => Chris,
[1] => Chris,
[country] => Ukraine,
[2] => Ukraine
)
PDO::FETCH_NAMED devuelve resultados en el mismo formato que
PDO::FETCH_ASSOC excepto que, cuando varias columnas usan
el mismo nombre, todos los valores se devuelven como una lista.
Para obtener más información sobre el manejo de nombres de columnas duplicados y alternativas, consulte la sección manejo de nombres duplicados anterior.
El orden en el que se devuelven los valores duplicados debe considerarse indefinido. No hay forma de saber de dónde proviene cada valor.
<?php
$stmt = $pdo->query(
"SELECT users.*, referrer.name
FROM users
LEFT JOIN users AS referrer ON users.referred_by = referrer.userid
WHERE userid = 109"
);
$row = $stmt->fetch(\PDO::FETCH_NUM);
print_r($row);El ejemplo anterior mostrará:
Array
(
[userid] => 109
[name] => Array
(
[0] => Toni
[1] => Chris
)
[country] => Germany
[referred_by] = 104
)
PDO::FETCH_NUM devuelve un array indexada únicamente por número
de columna. El número de columna comienza en 0 y se determina por el orden de las columnas de resultados en
la consulta, no (por ejemplo) por el orden en que se definen las columnas en la tabla.
Nota:
No se recomienda utilizar el índice de columna numérico, ya que esto puede cambiar cuando se cambie la consulta, o cuando se cambie el esquema de la tabla al usar
SELECT *.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_NUM);
print_r($row);El ejemplo anterior mostrará:
Array
(
[0] => 104
[1] => Chris
[2] => Ukraine
)
PDO::FETCH_COLUMN devuelve los valores de una sola columna.
Utilice el segundo argumento de PDOStatement::setFetchMode()
o PDOStatement::fetchAll() para especificar la columna que
se devuelve.
Si la columna especificada no existe, se lanzará un ValueError.
<?php
$stmt = $pdo->query("SELECT name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_COLUMN);
print_r($row);
$stmt = $pdo->query("SELECT name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_COLUMN, 1);
print_r($row);El ejemplo anterior mostrará:
Array
(
[0] => Chris
[1] => Jamie
[2] => Robin
)
Array
(
[0] => Ukraine
[1] => England
[2] => Germany
)
PDO::FETCH_KEY_PAIR devuelve pares de valores, indexados por
la primera columna. Los resultados deben contener solo dos columnas. Este modo de recuperación
solo tiene sentido con PDOStatement::fetchAll().
Nota:
Si la primera columna no es única, se perderán valores. Qué valor(es) se perderán debe considerarse indefinido.
<?php
$stmt = $pdo->query("SELECT name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_KEY_PAIR);
print_r($row);El ejemplo anterior mostrará:
Array
(
[Chris] => Ukraine
[Jamie] => England
[Robin] => Germany
)
Especifique una función para crear el valor devuelto. Este modo solo se puede usar con PDOStatement::fetchAll().
La función recibe los valores como parámetros. No es posible recuperar el nombre de la columna a la que estaba asociado un valor dado. Debe asegurarse de que el orden de las columnas en la consulta coincida con el esperado por la función.
Nota:
Los efectos de
PDO::FETCH_GROUPyPDO::FETCH_UNIQUEse aplican a los resultados antes de que se llame a la función.
<?php
function valueCreator($col1, $col2, $col3)
{
return [
'col1' => $col1,
'col2' => strtoupper($col2),
'col3' => $col3,
'customKey' => 'customValue',
];
}
$stmt = $pdo->query("SELECT userid, name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_FUNC, valueCreator(...));
print_r($row);El ejemplo anterior mostrará:
Array
(
[0] => Array
(
[col1] => 104
[col2] => SAM
[col3] => Ukraine
[customKey] => customValue
)
[1] => Array
(
[col1] => 105
[col2] => JAMIE
[col3] => England
[customKey] => customValue
)
[2] => Array
(
[col1] => 107
[col2] => ROBIN
[col3] => Germany
[customKey] => customValue
)
)
PDO::FETCH_OBJ devuelve un objeto
stdClass.
Véase también PDOStatement::fetchObject() y
PDO::FETCH_CLASS.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_OBJ);
print_r($row);El ejemplo anterior mostrará:
stdClass Object
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
Devuelve un objeto de una clase específica. Para conocer comportamientos adicionales, consulte las opciones flags.
Si una propiedad no existe con el nombre de una columna devuelta, se declarará dinámicamente. Este comportamiento está obsoleto y provocará un error a partir de PHP 9.0.
Véase también PDOStatement::fetchObject().
<?php
class TestEntity
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
public function __construct()
{
print "Constructor called with ". count(func_get_args()) ." args\n";
print "Properties set when constructor called? "
. (isset($this->name) ? 'Yes' : 'No') . "\n";
}
}
$stmt = $db->query(
"SELECT userid, name, country, referred_by_userid FROM users"
);
$stmt->setFetchMode(PDO::FETCH_CLASS, TestEntity::class);
$result = $stmt->fetch();
var_dump($result);Resultado del ejemplo anterior es similar a:
Constructor called with 0 args
Properties set when constructor called? Yes
object(TestEntity)#3 (4) {
["userid"]=>
int(104)
["name"]=>
string(5) "Chris"
["country"]=>
string(7) "Ukraine"
["referred_by_userid"]=>
NULL
}
Este modo de recuperación solo se puede usar combinado con
PDO::FETCH_CLASS (y
sus otras opciones).
Cuando se utiliza este modo de recuperación, PDO utilizará la primera columna devuelta como nombre de la clase que se devolverá.
Si no se encuentra la clase especificada, se devolverá un objeto stdClass, sin advertencia ni error.
<?php
class TestEntity
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
public function __construct()
{
print "Constructor called with ". count(func_get_args()) ." args\n";
print "Properties set when constructor called? "
. (isset($this->name) ? 'Yes' : 'No') . "\n";
}
}
$stmt = $db->query(
"SELECT 'TestEntity', userid, name, country, referred_by_userid FROM users"
);
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE);
$result = $stmt->fetch();
var_dump($result);Resultado del ejemplo anterior es similar a:
Constructor called with 0 args
Properties set when constructor called? Yes
object(TestEntity)#3 (4) {
["userid"]=>
int(104)
["name"]=>
string(5) "Chris"
["country"]=>
string(7) "Ukraine"
["referred_by_userid"]=>
NULL
}
Este modo de recuperación solo se puede usar combinado con
PDO::FETCH_CLASS (y
sus otras opciones).
Cuando se utiliza este modo de recuperación, se llamará al constructor antes de que se establezcan las propiedades.
<?php
class TestEntity
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
public function __construct()
{
print "Constructor called with ". count(func_get_args()) ." args\n";
print "Properties set when constructor called? "
. (isset($this->name) ? 'Yes' : 'No') . "\n";
}
}
$stmt = $db->query(
"SELECT userid, name, country, referred_by_userid FROM users"
);
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, TestEntity::class);
$result = $stmt->fetch();
var_dump($result);Resultado del ejemplo anterior es similar a:
Constructor called with 0 args
Properties set when constructor called? No
object(TestEntity)#3 (4) {
["userid"]=>
int(104)
["name"]=>
string(5) "Chris"
["country"]=>
string(7) "Ukraine"
["referred_by_userid"]=>
NULL
}
Esta función ha quedado OBSOLETA a partir de PHP 8.1.0. El uso de esta característica está altamente desaconsejado.
Este modo de recuperación solo se puede usar combinado con
PDO::FETCH_CLASS (y
sus otras opciones).
Cuando se utiliza este modo de recuperación, la clase especificada debe ser Serializable.
Esta función no admite una cadena que contenga un objeto serializado completo (con serialize()).
Este modo de recuperación no llama al constructor.
<?php
class TestEntity implements Serializable
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
public function __construct()
{
print "Constructor called with " . count(func_get_args()) . " args\n";
print "Properties set when constructor called? "
. (isset($this->name) ? 'Yes' : 'No') . "\n";
}
public function serialize() {
return join(
"|",
[$this->userid, $this->name, $this->country, $this->referred_by_userid]
);
}
public function unserialize(string $data) {
$parts = explode("|", $data);
$this->userid = (int) $parts[0];
$this->name = $parts[1];
$this->country = $parts[2];
$refId = $parts[3];
$this->referred_by_userid = ($refId === "" ? null : (int) $refId);
}
}
print "Set up record (constructor called manually):\n";
$db->exec(
"CREATE TABLE serialize (
sdata TEXT
)"
);
$origObj = new TestEntity();
$origObj->userid = 200;
$origObj->name = 'Seri';
$origObj->country = 'Syria';
$origObj->referred_by_userid = null;
$insert = $db->prepare("INSERT INTO serialize (sdata) VALUES (:sdata)");
$insert->execute(['sdata' => $origObj->serialize()]);
print "\nRetrieve result:\n"
$query = "SELECT sdata FROM serialize";
$stmt = $db->query($query);
// NOTE: Constructor is never called!
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_SERIALIZE, TestEntity::class);
$result = $stmt->fetch();
var_dump($result);Resultado del ejemplo anterior es similar a:
Deprecated: TestEntity implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in Standard input code on line 2
Set up record (constructor called manually):
Constructor called with 0 args
Properties set when constructor called? No
Retrieve result:
Deprecated: PDOStatement::setFetchMode(): The PDO::FETCH_SERIALIZE mode is deprecated in Standard input code on line 58
Deprecated: PDOStatement::fetch(): The PDO::FETCH_SERIALIZE mode is deprecated in Standard input code on line 59
object(TestEntity)#5 (4) {
["userid"]=>
int(200)
["name"]=>
string(4) "Seri"
["country"]=>
string(5) "Syria"
["referred_by_userid"]=>
NULL
}
Este modo de recuperación no se puede utilizar con PDOStatement::fetchAll().
Este modo de recuperación no devuelve directamente un resultado, sino que asigna valores a
las variables especificadas con PDOStatement::bindColumn(). El
método de recuperación llamado devuelve true.
Nota:
Cuando se utilizan sentencias preparadas, para que funcionen correctamente, las variables deben enlazarse después de que se ejecute la consulta.
<?php
$query = "SELECT users.userid, users.name, users.country, referrer.name
FROM users
LEFT JOIN users AS referrer ON users.referred_by_userid = referrer.userid";
$stmt = $db->prepare($query);
$stmt->execute();
$stmt->bindColumn('userid', $userId);
$stmt->bindColumn('name', $name);
$stmt->bindColumn('country', $country);
// Se utiliza la posición de la columna para resolver nombres de columna duplicados.
// Para evitar que esto falle si se modifica la consulta, se recomienda usar un alias SQL.
// Por ejemplo: referrer.name AS referrer_name
$stmt->bindColumn(4, $referrerName);
print "\nfetch:\n";
while ($stmt->fetch(\PDO::FETCH_BOUND)) {
print join("\t", [$userId, $name, $country, ($referrerName ?? 'NULL')]) . "\n";
}El ejemplo anterior mostrará:
104 Chris Ukraine NULL 105 Jamie England NULL 107 Robin Germany Chris 108 Sean Ukraine NULL 109 Toni Germany NULL 110 Toni Germany NULL
Este modo de recuperación no se puede utilizar con PDOStatement::fetchAll().
Este modo de recuperación actualiza las propiedades del objeto especificado. El objeto se devuelve si la operación se realiza correctamente.
Si una propiedad no existe con el nombre de una columna devuelta, se declarará dinámicamente. Este comportamiento está obsoleto y provocará un error a partir de PHP 9.0.
Las propiedades deben ser public y no pueden ser
readonly.
No hay forma de cambiar el objeto que se va a actualizar sin usar PDOStatement::setFetchMode() entre la recuperación de cada registro.
<?php
class TestEntity
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
}
$obj = new TestEntity();
$stmt->setFetchMode(\PDO::FETCH_INTO, $obj);
$stmt = $db->query("SELECT userid, name, country, referred_by_userid FROM users");
$result = $stmt->fetch();
var_dump($result);Resultado del ejemplo anterior es similar a:
object(TestEntity)#3 (4) {
["userid"]=>
int(104)
["name"]=>
string(5) "Chris"
["country"]=>
string(7) "Ukraine"
["referred_by_userid"]=>
NULL
}
Este modo de recuperación no se puede utilizar con PDOStatement::fetchAll().
Este modo de obtención recuperación un objeto PDORow que proporciona acceso
a los valores tanto como arrays como objetos (es decir, combina el comportamiento de
PDO::FETCH_BOTH y
PDO::FETCH_OBJ), recuperados de forma diferida.
Esto permite un acceso eficiente en memoria (en el lado de PHP) a los resultados sin almacenar en búfer en el servidor de la base de datos. El uso o no de almacenamiento en búfer del lado del cliente por parte de PDO depende del controlador específico de la base de datos que se utilice (y de su configuración).
PDORow devolverá NULL sin
mostrar ningún error ni advertencia al acceder a propiedades o claves no definidas.
Esto puede dificultar la detección y depuración de errores como erratas o consultas que
no devuelven los datos esperados.
El objeto PDORow devuelto se actualiza cada vez que se recupera un resultado.
<?php
$stmt = $db->query("SELECT userid, name, country, referred_by_userid FROM users");
$result = $stmt->fetch(\PDO::FETCH_LAZY);
print "ID: ". $result[0] ."\n";
print "Nombre: {$result->name}\n";
print "País: " . $result['country'] ."\n";
// Devuelve NULL. No se genera ninguna advertencia ni error.
print "No existe: " . var_export($result->does_not_exist, true) . "\n";
$differentResult = $stmt->fetch(\PDO::FETCH_LAZY);
// El PDOrow recuperado previamente ahora apunta al resultado recién recuperado.
print "ID: ". $result[0] ."\n";El ejemplo anterior mostrará:
ID: 104 Nombre: Chris País: Ukraine No existe: NULL ID: 105
PDO::FETCH_GROUP devuelve listas de arrays asociativos,
indexados por una columna (no única). Este modo de obtención solo funciona con
PDOStatement::fetchAll().
Cuando se combina con PDO::FETCH_UNIQUE, ambos modos
utilizarán la misma columna, lo que hace que la combinación de estos modos sea inútil.
Esta recuperación debe combinarse con una de
PDO::FETCH_ASSOC, PDO::FETCH_BOTH,
PDO::FETCH_NAMED, PDO::FETCH_NUM,
PDO::FETCH_COLUMN o
PDO::FETCH_FUNC.
Si no se proporciona ningún modo de recuperación de la lista anterior, se utilizará el modo de recuperación predeterminado actual para PDOStatement.
<?php
$stmt = $pdo->query("SELECT country, userid, name FROM users");
$row = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_ASSOC);
print_r($row);El ejemplo anterior mostrará:
Array
(
[Ukraine] => Array
(
[0] => Array
(
[userid] => 104
[name] => Chris
)
[1] => Array
(
[userid] => 108
[name] => Sean
)
)
[England] => Array
(
[0] => Array
(
[userid] => 105
[name] => Jamie
)
)
[Germany] => Array
(
[0] => Array
(
[userid] => 107
[name] => Robin
)
[1] => Array
(
[userid] => 109
[name] => Toni
)
)
)
En el ejemplo anterior, observará que la primera columna se omite del array en cada fila y solo está disponible como clave. Se puede incluir repitiendo la columna, como en el siguiente ejemplo:
<?php
$stmt = $pdo->query("SELECT country, userid, name, country FROM users");
$row = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_ASSOC);
print_r($row);El ejemplo anterior mostrará:
Array
(
[Ukraine] => Array
(
[0] => Array
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
[1] => Array
(
[userid] => 108
[name] => Sean
[country] => Ukraine
)
)
[England] => Array
(
[0] => Array
(
[userid] => 105
[name] => Jamie
[country] => England
)
)
[Germany] => Array
(
[0] => Array
(
[userid] => 107
[name] => Robin
[country] => Germany
)
[1] => Array
(
[userid] => 109
[name] => Toni
[country] => Germany
)
)
)
PDO::FETCH_UNIQUE utiliza la primera columna para indexar los registros,
devolviendo un registro por cada valor de índice. Este modo de recuperación solo funciona con
PDOStatement::fetchAll().
Cuando se combina con PDO::FETCH_GROUP, ambos modos utilizarán
la misma columna, lo que hace que la combinación de estos modos sea inútil.
Esta recuperación debe combinarse con uno de
PDO::FETCH_ASSOC, PDO::FETCH_BOTH,
PDO::FETCH_NAMED, PDO::FETCH_NUM,
PDO::FETCH_COLUMN o
PDO::FETCH_FUNC.
Si no se proporciona ningún modo de recuperación de la lista anterior, se utilizará el modo de recuperación predeterminado actual para PDOStatement.
Cuando se utiliza con una columna que se sabe que es única (como el ID del registro), este modo proporciona la capacidad de devolver rápidamente resultados indexados por ese valor.
Nota:
Si la primera columna no es única, se perderán valores. Qué valor(es) se perderán se considera indefinido.
Siempre que sea posible, se recomienda filtrar los registros mediante SQL. La base de datos utilizará índices para optimizar este proceso y devolver únicamente los registros necesarios. Seleccionar más registros de los necesarios puede aumentar significativamente el uso de memoria y el tiempo de consulta para conjuntos de resultados grandes.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC);
print_r($row);El ejemplo anterior mostrará:
Array
(
[104] => Array
(
[name] => Chris
[country] => Ukraine
)
[105] => Array
(
[name] => Jamie
[country] => England
)
[107] => Array
(
[name] => Robin
[country] => Germany
)
)
En el ejemplo anterior, observará que la primera columna se omite del array en cada fila y solo está disponible como clave. Se puede incluir repitiendo la columna, como en el siguiente ejemplo:
<?php
$stmt = $pdo->query("SELECT userid, userid, name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC);
print_r($row);El ejemplo anterior mostrará:
Array
(
[104] => Array
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
[105] => Array
(
[userid] => 105
[name] => Jamie
[country] => England
)
[107] => Array
(
[userid] => 107
[name] => Robin
[country] => Germany
)
)