Quatre fonctions permettent de récupèrer le ou les
enregistrements (ou tuples) retournés par une requête SELECT. Toutes ces fonctions travaillent de
la même façon : elles renvoient un par un les enregistrements
sélectionnés par la requête, puis NULL
quand il n'y a plus rien.
Ce qui différencie ces fonctions
c'est la forme sous laquelle les enregistrements sont renvoyés :
- mysqli_fetch_assoc()
renvoie l'enregistrement sous la forme d'un tableau associatif : les
clés du tableau sont les noms des champs des tables. Nous pouvons
donc atteindre les valeurs par $enr['auNom'],
$enr['auPrenom'], etc.
- mysqli_fetch_row()
renvoie l'enregistrement sous la forme d'un tableau à indices numériques. Les
champs sont indicés suivant l'ordre dans lequel ils apparaissent
dans le SELECT. Nous pouvons atteindre
les valeurs par $enr[0], $enr[1], etc.
- mysqli_fetch_array()
renvoie, par défaut,l'enregistrement sous la forme d'un tableau associatif ET
à indices numériques. Nous pouvons donc atteindre les valeurs par $enr['auNom'] ou par $enr[0].
N'utilisez jamais cette fonction sans lui transmettre de paramètre
ou en lui transmettant la constante MYSQLI_BOTH, car dans ces cas-là elle
consomme le double de mémoire que les autres.
- mysqli_fetch_object()
renvoie l'enregistrement sous la forme d'un objet. Les champs
deviennent des propriétés d'objet et on accède aux valeurs avec la
syntaxe $objet->propriété, par
exemple $enr->auNom.
mysqli_fetch_assoc()
est la fonction à privilégier car :
- les champs sont facilement identifiables comme clé d'un
tableau associatif,
- l'ordre des champs dans le SELECT
n'a aucune influence sur les indices (contrairement à mysqli_fetch_row())
et les modifications en sont extrêmement simplifiées
- aucun gaspillage de ressources comme avec mysqli_fetch_array().
Exemples ...
On ne teste pas les erreurs sur les fonctions mysqli_fetch_assoc(),
mysqli_fetch_row(),
mysqli_fetch_array()
ou mysqli_fetch_object().
Les erreurs importantes pouvant survenir sont dans la requête SQL et
interviennent donc dans la fonction mysqli_query().
Si une requête de sélection ne renvoie pas d'enregistrement (ie ne
sélectionne rien), les fonctions renverront la valeur NULL.
Le test de "sélection vide" peut être fait comme dans l'exemple
suivant.
Le code
$enr = mysqli_fetch_assoc($r);
if ($enr === NULL) {
echo 'Aucun enregistrement sélectionné.';
} else {
infoTableau($enr);
}
peut aussi être écrit :
if ($enr = mysqli_fetch_assoc($r)) {
infoTableau($enr);
} else {
echo 'Aucun enregistrement sélectionné.';
}
if ($enr = mysqli_fetch_assoc($r)) { est
un "raccourci" souvent utilisé avec PHP :
- la fonction mysqli_fetch_assoc()
est exécutée
- son résultat est affecté à la variable $enr
- si la valeur de $enr est
évaluée comme TRUE le bloc if est exécuté,
- sinon le bloc else est exécuté.
Nous profitons ici du transtypage automatique fait par PHP qui évalue
un tableau non vide comme TRUE, et qui évalue
NULL comme FALSE.
Pour connaitre le nombre d'enregistrements sélectionnés par une
requête de sélection nous pouvons utiliser la fonction mysqli_num_rows(),
comme illustré dans l'exemple suivant.