Voir les constantes de curseur pour les
constantes de curseur PDO::FETCH_ORI_*.
| Mode de récupération | Résumé |
|---|---|
PDO::FETCH_DEFAULT
|
Valeur spéciale pour utiliser le mode de récupération par défaut actuel. |
PDO::FETCH_ASSOC
|
Tableau indexé par le nom de colonne uniquement. |
PDO::FETCH_BOTH (Défaut)
|
Tableau indexé à la fois par le numéro de colonne et par le nom. |
PDO::FETCH_NAMED
|
Variante de PDO::FETCH_ASSOC qui conserve les colonnes
dupliquées.
|
PDO::FETCH_NUM
|
Tableau indexé par le numéro de colonne uniquement. |
PDO::FETCH_COLUMN
|
Une seule colonne. |
PDO::FETCH_KEY_PAIR
|
Paires de clés-valeurs, indexées par la premiÚre colonne. |
PDO::FETCH_FUNC
|
Utilise une fonction pour créer la valeur de retour. (seulement PDOStatement::fetchAll()) |
PDO::FETCH_OBJ
|
Objet anonyme (stdClass). |
PDO::FETCH_CLASS
|
Crée un objet d'une classe spécifiée. |
Ces modes sont utilisés pour implémenter des options lors de l'utilisation de
PDO::FETCH_CLASS.
| Mode de récupération | Résumé |
|---|---|
PDO::FETCH_CLASSTYPE
|
Utilise la premiĂšre colonne comme nom de classe. |
PDO::FETCH_PROPS_LATE
|
Appelle le constructeur avant de définir les propriétés. |
PDO::FETCH_SERIALIZE
|
Utilise les données PHP sérialisées. ObsolÚte à partir de PHP 8.1.0. |
Les modes suivants ne peuvent pas ĂȘtre utilisĂ©s avec PDOStatement::fetchAll().
| Mode de récupération | Résumé |
|---|---|
PDO::FETCH_BOUND
|
Lie les valeurs aux variables spécifiées. |
PDO::FETCH_INTO
|
Met Ă jour un objet existant. |
PDO::FETCH_LAZY
|
Récupération paresseuse via PDORow pour un accÚs de type tableau et objet. |
Les modes spéciaux suivants pour plusieurs résultats ne fonctionnent qu'avec PDOStatement::fetchAll() et ne fonctionnent pas avec certains autres modes de récupération. Consulter la documentation complÚte pour plus de détails.
| Mode de récupération | Résumé |
|---|---|
PDO::FETCH_GROUP
|
Les résultats sont regroupés par la premiÚre colonne. |
PDO::FETCH_UNIQUE
|
Les résultats sont (uniquement) indexés par la premiÚre colonne. |
Il est possible que les rĂ©sultats contiennent plusieurs colonnes utilisant le mĂȘme nom. Par exemple, lors de la jointure de 2 tables contenant toutes deux une colonne avec le mĂȘme nom.
Ătant donnĂ© que les structures PHP telles que les tableaux et les objets ne prennent pas en charge plusieurs clĂ©s ou propriĂ©tĂ©s utilisant le mĂȘme nom, le tableau ou l'objet retournĂ© contiendra uniquement 1 des valeurs utilisant le mĂȘme nom.
La valeur retournĂ©e pour un nom dupliquĂ© donnĂ© doit ĂȘtre considĂ©rĂ©e comme indĂ©finie.
Pour éviter ce problÚme, nommez explicitement les colonnes en utilisant un alias. Par exemple :
SELECT table1.created_at AS t1_created_at,
table2.created_at AS t2_created_at
FROM table1
JOIN table2 ON table1.table2id = table2.id
Voir également PDO::FETCH_NAMED,
PDO::ATTR_FETCH_TABLE_NAMES et
PDO::ATTR_FETCH_CATALOG_NAMES.
Il est possible de dĂ©finir le mode de rĂ©cupĂ©ration par dĂ©faut pour toutes les requĂȘtes en utilisant
PDO::ATTR_DEFAULT_FETCH_MODE avec
PDO::__construct() or
PDO::setAttribute().
Le mode de récupération par défaut est initialement défini sur
PDOStatement::setFetchMode().
Cela affecte la rĂ©utilisation en tant que requĂȘte prĂ©parĂ©e et l'itĂ©ration (en utilisant
foreach).
PDOStatement::setAttribute() ne peut pas ĂȘtre utilisĂ© pour dĂ©finir le mode de rĂ©cupĂ©ration par dĂ©faut. Il n'accepte que les attributs spĂ©cifiques au pilote et ignore silencieusement les attributs qui ne sont pas reconnus.
Disponible Ă partir de PHP 8.0.7.
Ceci est une valeur spéciale qui utilise le mode de récupération par défaut actuel pour une
PDOStatement. C'est particuliÚrement utile comme valeur par défaut
pour les paramÚtres de méthode lors de l'extension de
PDOStatement pour une utilisation avec
PDO::ATTR_STATEMENT_CLASS.
Cette valeur ne peut pas ĂȘtre utilisĂ©e avec
PDO::ATTR_DEFAULT_FETCH_MODE.
PDO::FETCH_ASSOC retourne un tableau indexé par le nom de la colonne
uniquement.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_ASSOC);
print_r($row);L'exemple ci-dessus va afficher :
Array
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
Ceci est le mode de récupération par défaut.
PDO::FETCH_BOTH retourne un tableau indexé à la fois par le numéro de colonne
et par le nom. Cela signifie que chaque valeur retournée est dupliquée pour chaque
ligne de résultat.
Le numĂ©ro de colonne commence Ă 0 et est dĂ©terminĂ© par l'ordre des colonnes de rĂ©sultat dans la requĂȘte, et non (par exemple) par l'ordre dans lequel les colonnes sont dĂ©finies dans la table.
Note: L'utilisation de l'index de colonne numĂ©rique n'est pas recommandĂ©e car cela peut changer lorsque la requĂȘte est modifiĂ©e, ou lorsque le schĂ©ma de la table est modifiĂ© lors de l'utilisation de
SELECT *.
Note: Le nombre d'entrĂ©es indexĂ©es par le nom peut ne pas correspondre au nombre d'entrĂ©es indexĂ©es par le numĂ©ro dans les cas oĂč plusieurs colonnes retournĂ©es utilisent le mĂȘme nom.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_BOTH);
print_r($row);L'exemple ci-dessus va afficher :
Array
(
[id] => 104,
[0] => 104,
[name] => Chris,
[1] => Chris,
[country] => Ukraine,
[2] => Ukraine
)
PDO::FETCH_NAMED renvoie des rĂ©sultats dans le mĂȘme format que
PDO::FETCH_ASSOC sauf que lorsque plusieurs colonnes utilisent
le mĂȘme nom, toutes les valeurs sont retournĂ©es sous forme de liste.
Pour plus d'informations sur la gestion des noms de colonnes dupliqués et les alternatives, voir la section sur la gestion des noms dupliqués ci-dessus.
L'ordre dans lequel les valeurs dupliquĂ©es sont retournĂ©es doit ĂȘtre considĂ©rĂ© comme indĂ©fini. Il n'y a aucun moyen de savoir d'oĂč provient chaque valeur.
<?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);L'exemple ci-dessus va afficher :
Array
(
[userid] => 109
[name] => Array
(
[0] => Toni
[1] => Chris
)
[country] => Germany
[referred_by] = 104
)
PDO::FETCH_NUM renvoie un tableau indexé par le numéro de colonne
uniquement. Le numéro de colonne commence à 0 et est déterminé par l'ordre des colonnes de résultat dans
la requĂȘte, et non (par exemple) par l'ordre dans lequel les colonnes sont dĂ©finies dans la table.
Note: L'utilisation de l'index de colonne numĂ©rique n'est pas recommandĂ©e car cela peut changer lorsque la requĂȘte est modifiĂ©e, ou lorsque le schĂ©ma de la table est modifiĂ© lors de l'utilisation de
SELECT *.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_NUM);
print_r($row);L'exemple ci-dessus va afficher :
Array
(
[0] => 104
[1] => Chris
[2] => Ukraine
)
PDO::FETCH_COLUMN renvoie des valeurs d'une seule colonne.
Utiliser le deuxiĂšme argument pour PDOStatement::setFetchMode()
ou PDOStatement::fetchAll() pour spécifier quelle colonne est
retournée.
Si la colonne spécifiée n'existe pas, une ValueError sera levée.
<?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);L'exemple ci-dessus va afficher :
Array
(
[0] => Chris
[1] => Jamie
[2] => Robin
)
Array
(
[0] => Ukraine
[1] => England
[2] => Germany
)
PDO::FETCH_KEY_PAIR renvoie des paires de valeurs, indexées par
la premiÚre colonne. Les résultats doivent contenir uniquement 2 colonnes. Ce mode de récupération
n'a de sens qu'avec PDOStatement::fetchAll().
Note: Si la premiĂšre colonne n'est pas unique, des valeurs seront perdues. Les valeurs perdues doivent ĂȘtre considĂ©rĂ©es comme indĂ©finies.
<?php
$stmt = $pdo->query("SELECT name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_KEY_PAIR);
print_r($row);L'exemple ci-dessus va afficher :
Array
(
[Chris] => Ukraine
[Jamie] => England
[Robin] => Germany
)
SpĂ©cifier une fonction pour crĂ©er la valeur retournĂ©e. Ce mode ne peut ĂȘtre utilisĂ© qu'avec PDOStatement::fetchAll().
La fonction reçoit les valeurs en tant que paramĂštres. Il n'y a aucun moyen de rĂ©cupĂ©rer le nom de la colonne Ă laquelle une valeur donnĂ©e Ă©tait associĂ©e. Il faut s'assurer que l'ordre des colonnes dans la requĂȘte correspond Ă celui attendu par la fonction.
Note: Les effets de
PDO::FETCH_GROUPetPDO::FETCH_UNIQUEsont appliqués aux résultats avant que la fonction ne soit appelée.
<?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);L'exemple ci-dessus va afficher :
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 renvoie un objet
stdClass.
Voir aussi PDOStatement::fetchObject() et
PDO::FETCH_CLASS.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_OBJ);
print_r($row);L'exemple ci-dessus va afficher :
stdClass Object
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
Renvoie un objet d'une classe spécifiée. Pour des comportements supplémentaires, voir les options de drapeau.
Si une propriété n'existe pas avec le nom d'une colonne retournée, elle sera déclarée dynamiquement. Ce comportement est obsolÚte et entraßnera une erreur à partir de PHP 9.0.
Voir aussi 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);Résultat de l'exemple ci-dessus est similaire à :
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
}
Ce mode de rĂ©cupĂ©ration peut uniquement ĂȘtre utilisĂ© en combinaison avec
PDO::FETCH_CLASS (et
ses autres options).
Lorsque ce mode de récupération est utilisé, PDO utilisera la premiÚre colonne retournée comme nom de la classe à retourner.
Si la classe spĂ©cifiĂ©e ne peut pas ĂȘtre trouvĂ©e, un objet stdClass sera retournĂ©, sans avertissement ni erreur.
<?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);Résultat de l'exemple ci-dessus est similaire à :
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
}
Ce mode de rĂ©cupĂ©ration peut uniquement ĂȘtre utilisĂ© en combinaison avec
PDO::FETCH_CLASS (et
ses autres options).
Lorsque ce mode de récupération est utilisé, le constructeur sera appelé avant que les propriétés ne soient définies.
<?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);Résultat de l'exemple ci-dessus est similaire à :
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
}
Cette fonctionnalitĂ© est OBSOLĂTE depuis PHP 8.1.0. Son utilisation est fortement dĂ©conseillĂ©e.
Ce mode de rĂ©cupĂ©ration peut uniquement ĂȘtre utilisĂ© en combinaison avec
PDO::FETCH_CLASS (et
ses autres options).
Lorsque ce mode de rĂ©cupĂ©ration est utilisĂ©, la classe spĂ©cifiĂ©e doit ĂȘtre Serializable.
Cette fonctionnalité ne prend pas en charge une chaßne contenant un objet sérialisé complet (avec serialize()).
Ce mode de récupération n'appelle pas le constructeur.
<?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: Le constructeur n'est jamais appelé
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_SERIALIZE, TestEntity::class);
$result = $stmt->fetch();
var_dump($result);Résultat de l'exemple ci-dessus est similaire à :
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
}
Ce mode de rĂ©cupĂ©ration ne peut pas ĂȘtre utilisĂ© avec PDOStatement::fetchAll().
Ce mode de rĂ©cupĂ©ration ne renvoie pas directement un rĂ©sultat, mais lie des valeurs Ă
des variables spécifiées avec PDOStatement::bindColumn(). La
méthode fetch appelée renvoie true.
Note: Lors de l'utilisation d'instructions prĂ©parĂ©es, pour fonctionner correctement, les variables doivent ĂȘtre liĂ©es aprĂšs l'exĂ©cution de la requĂȘte.
<?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);
// Lie par position de colonne pour résoudre le nom de colonne dupliqué
// Pour Ă©viter que cela ne casse si la requĂȘte est modifiĂ©e, utiliser un alias SQL Ă la place
// Par exemple : referrer.name AS referrer_name
$stmt->bindColumn(4, $referrerName);
while ($stmt->fetch(\PDO::FETCH_BOUND)) {
print join("\t", [$userId, $name, $country, ($referrerName ?? 'NULL')]) . "\n";
}L'exemple ci-dessus va afficher :
104 Chris Ukraine NULL 105 Jamie England NULL 107 Robin Germany Chris 108 Sean Ukraine NULL 109 Toni Germany NULL 110 Toni Germany NULL
Ce mode de rĂ©cupĂ©ration ne peut pas ĂȘtre utilisĂ© avec PDOStatement::fetchAll().
Ce mode de récupération met à jour les propriétés de l'objet spécifié. L'objet est renvoyé en cas de succÚs.
Si une propriété n'existe pas avec le nom d'une colonne renvoyée, elle sera déclarée dynamiquement. Ce comportement est obsolÚte et entraßnera une erreur à partir de PHP 9.0.
Les propriĂ©tĂ©s doivent ĂȘtre public et ne peuvent pas ĂȘtre
readonly.
Il n'y a aucun moyen de changer l'objet à mettre à jour sans utiliser PDOStatement::setFetchMode() entre la récupération de chaque enregistrement.
<?php
class TestEntity
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
}
$obj = new TestEntity();
$stmt = $db->query("SELECT userid, name, country, referred_by_userid FROM users");
$stmt->setFetchMode(\PDO::FETCH_INTO, $obj);
$result = $stmt->fetch();
var_dump($result);Résultat de l'exemple ci-dessus est similaire à :
object(TestEntity)#3 (4) {
["userid"]=>
int(104)
["name"]=>
string(5) "Chris"
["country"]=>
string(7) "Ukraine"
["referred_by_userid"]=>
NULL
}
Ce mode de rĂ©cupĂ©ration ne peut pas ĂȘtre utilisĂ© avec PDOStatement::fetchAll().
Ce mode de récupération renvoie un objet PDORow qui fournit
un accĂšs Ă la fois de type tableau et de type objet aux valeurs (c'est-Ă -dire qu'il combine le comportement de
PDO::FETCH_BOTH et
PDO::FETCH_OBJ), récupérées de maniÚre paresseuse.
Cela peut fournir un accÚs efficace en mémoire (du cÎté PHP) aux résultats non mis en mémoire tampon sur le serveur de base de données. Que PDO utilise ou non un tampon cÎté client pour les résultats dépend du pilote spécifique à la base de données utilisé (et de sa configuration).
PDORow renverra NULL sans
aucun avertissement ou erreur lors de l'accÚs à des propriétés ou des clés qui ne sont pas définies.
Cela peut rendre des erreurs telles que des fautes de frappe ou des requĂȘtes ne renvoyant pas les donnĂ©es attendues
plus difficiles à repérer et à déboguer.
L'objet PDORow renvoyé est mis à jour chaque fois qu'un résultat est récupéré.
<?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 "Name: {$result->name}\n";
print "Country: " . $result['country'] ."\n";
// Renvoie NULL. Aucun avertissement ou erreur n'est levé.
print "Does not exist: " . var_export($result->does_not_exist, true) . "\n";
$differentResult = $stmt->fetch(\PDO::FETCH_LAZY);
// L'objet PDORow précédemment récupéré pointe maintenant vers le nouveau résultat récupéré
print "ID: ". $result[0] ."\n";L'exemple ci-dessus va afficher :
ID: 104 Name: Chris Country: Ukraine Does not exist: NULL ID: 105
PDO::FETCH_GROUP renvoie des listes de tableaux associatifs,
indexés par une colonne (non unique). Ce mode de récupération ne fonctionne qu'avec
PDOStatement::fetchAll().
Lorsqu'il est combiné avec PDO::FETCH_UNIQUE, les deux modes utiliseront
la mĂȘme colonne, rendant la combinaison de ces modes inutile.
Cette rĂ©cupĂ©ration doit ĂȘtre combinĂ©e avec l'un des
PDO::FETCH_ASSOC, PDO::FETCH_BOTH,
PDO::FETCH_NAMED, PDO::FETCH_NUM,
PDO::FETCH_COLUMN ou
PDO::FETCH_FUNC.
Si aucun mode de récupération de la liste ci-dessus n'est donné, le mode de récupération par défaut actuel pour la PDOStatement sera utilisé.
<?php
$stmt = $pdo->query("SELECT country, userid, name FROM users");
$row = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_ASSOC);
print_r($row);L'exemple ci-dessus va afficher :
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
)
)
)
Dans l'exemple ci-dessus, il est notable que la premiĂšre colonne est omise du tableau pour chaque ligne, n'Ă©tant disponible que comme clĂ©. Elle peut ĂȘtre incluse en rĂ©pĂ©tant la colonne, comme dans l'exemple suivant :
<?php
$stmt = $pdo->query("SELECT country, userid, name, country FROM users");
$row = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_ASSOC);
print_r($row);L'exemple ci-dessus va afficher :
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 utilise la premiĂšre colonne pour indexer les enregistrements,
renvoyant 1 enregistrement par valeur d'index. Ce mode de récupération ne fonctionne qu'avec
PDOStatement::fetchAll().
Lorsqu'il est combiné avec PDO::FETCH_GROUP, les deux modes utiliseront
la mĂȘme colonne, rendant la combinaison de ces modes inutile.
Cette rĂ©cupĂ©ration doit ĂȘtre combinĂ©e avec l'un des
PDO::FETCH_ASSOC, PDO::FETCH_BOTH,
PDO::FETCH_NAMED, PDO::FETCH_NUM,
PDO::FETCH_COLUMN ou
PDO::FETCH_FUNC.
Si aucun mode de récupération de la liste ci-dessus n'est donné, le mode de récupération par défaut actuel pour la PDOStatement sera utilisé.
Lorsqu'il est utilisĂ© avec une colonne qui est connue pour ĂȘtre unique (comme l'ID d'enregistrement), ce mode offre la possibilitĂ© de renvoyer rapidement des rĂ©sultats indexĂ©s par cette valeur.
Note: Si la premiĂšre colonne n'est pas unique, des valeurs seront perdues. La ou les valeur(s) qui sont perdues doivent ĂȘtre considĂ©rĂ©es comme indĂ©finies.
Le filtrage des enregistrements doit ĂȘtre effectuĂ© dans SQL si possible.La base de donnĂ©es utilisera des index pour optimiser ce processus et ne renvoyer que les enregistrements requis. SĂ©lectionner plus d'enregistrements que nĂ©cessaire dans la base de donnĂ©es peut augmenter considĂ©rablement l'utilisation de la mĂ©moire et le temps de requĂȘte pour des ensembles de rĂ©sultats plus volumineux.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC);
print_r($row);L'exemple ci-dessus va afficher :
Array
(
[104] => Array
(
[name] => Chris
[country] => Ukraine
)
[105] => Array
(
[name] => Jamie
[country] => England
)
[107] => Array
(
[name] => Robin
[country] => Germany
)
)
Dans l'exemple ci-dessus, il est notable que la premiĂšre colonne est omise du tableau pour chaque ligne, n'Ă©tant disponible que comme clĂ©. Elle peut ĂȘtre incluse en rĂ©pĂ©tant la colonne, comme dans l'exemple suivant :
<?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);L'exemple ci-dessus va afficher :
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
)
)