fetch_assoc
Apprenez à utiliser mysqli_fetch_assoc() en PHP pour récupérer des lignes d'un résultat MySQLi sous forme de tableau associatif.
La fonction mysqli_fetch_assoc() récupère une ligne d'un résultat MySQLi et la renvoie sous forme de tableau associatif, où chaque clé correspond au nom d'une colonne de votre requête. Cette page explique sa syntaxe, sa valeur de retour, son comportement dans une boucle, les erreurs les plus courantes, et comment elle se distingue des autres fonctions de récupération.
Ce que fait mysqli_fetch_assoc()
Lorsque vous exécutez une requête SELECT, MySQLi vous renvoie un résultat — un pointeur vers les lignes correspondant à votre requête. mysqli_fetch_assoc() extrait la prochaine ligne de ce résultat et vous la remet sous forme de tableau indexé par les noms de colonnes :
$row = mysqli_fetch_assoc($result);
echo $row['email']; // access a value by its column nameChaque appel fait avancer un curseur interne, de sorte qu'appeler la fonction de manière répétée parcourt les lignes une à une. Lorsqu'il n'y a plus de lignes, elle renvoie null.
Syntaxe
mysqli_fetch_assoc(mysqli_result $result): array|null|false| Partie | Signification |
|---|---|
$result | Un object résultat renvoyé par mysqli_query() (ou mysqli_store_result() / mysqli_use_result()). |
| Retour | Un tableau associatif pour la ligne récupérée, null lorsqu'il n'y a plus de lignes, ou false en cas d'échec. |
Si deux colonnes de votre SELECT portent le même nom (par exemple un JOIN renvoyant deux colonnes id), seule la dernière sera conservée dans le tableau — utilisez des alias de colonnes (SELECT a.id AS user_id) pour les distinguer.
Récupérer des lignes dans une boucle
On appelle presque toujours mysqli_fetch_assoc() dans une boucle while. Comme elle renvoie null (valeur fausse) après la dernière ligne, la boucle se termine d'elle-même :
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "shop");
if (mysqli_connect_errno()) {
die("Connection failed: " . mysqli_connect_error());
}
$result = mysqli_query($mysqli, "SELECT id, name, price FROM products");
if ($result) {
while ($row = mysqli_fetch_assoc($result)) {
echo $row['id'] . ": " . $row['name'] . " ($" . $row['price'] . ")\n";
}
mysqli_free_result($result);
} else {
echo "Query failed: " . mysqli_error($mysqli);
}
mysqli_close($mysqli);
?>Nous vérifions la connexion avec mysqli_connect_errno(), exécutons la requête, puis itérons. Chaque itération assigne la ligne suivante à $row ; lorsque le résultat est épuisé, l'affectation renvoie null, la condition while devient fausse et la boucle s'arrête. mysqli_free_result() libère la mémoire occupée par le résultat une fois que nous en avons terminé.
Voir le tableau qu'elle renvoie
Vous n'avez pas besoin d'une base de données pour comprendre la structure d'une ligne. L'extrait ci-dessous construit un tableau identique à ce que retournerait un seul appel à mysqli_fetch_assoc() et l'affiche, afin que vous puissiez voir les clés correspondant aux noms de colonnes :
<?php
// This is the structure mysqli_fetch_assoc() hands back for one row.
$row = [
"id" => 1,
"name" => "Keyboard",
"price" => 29.99,
];
echo "Product: " . $row["name"] . "\n";
echo "Price: $" . $row["price"] . "\n";
print_r($row);
?>L'exécution affiche :
Product: Keyboard
Price: $29.99
Array
(
[id] => 1
[name] => Keyboard
[price] => 29.99
)Erreurs courantes
- Appeler la fonction sur une requête échouée.
mysqli_query()renvoiefalseen cas d'erreur, et passerfalseàmysqli_fetch_assoc()est invalide. Vérifiez toujours$resultau préalable, comme dans la boucle ci-dessus. - Oublier qu'elle ne renvoie qu'une seule ligne. Un seul appel vous donne la prochaine ligne, pas toute la table. Utilisez une boucle pour les lire toutes.
- Confondre
==avec l'affectation. La boucle utilise$row = mysqli_fetch_assoc($result)(affectation). Écrire==ne ferait jamais avancer le curseur et pourrait provoquer une boucle infinie. - Essayer un accès numérique. Utilisez
$row['name'], pas$row[0]. Pour les clés numériques, utilisezmysqli_fetch_row(); pour les deux à la fois, utilisezmysqli_fetch_array().
Comparaison avec les autres fonctions de récupération
| Fonction | Renvoie chaque ligne sous forme de |
|---|---|
mysqli_fetch_assoc() | Tableau associatif ($row['name']) |
mysqli_fetch_row() | Tableau numérique ($row[0]) |
mysqli_fetch_array() | Clés associatives et numériques |
mysqli_fetch_object() | Un objet ($row->name) |
mysqli_fetch_all() | Un tableau contenant toutes les lignes à la fois |
Préférez mysqli_fetch_assoc() lorsque vous souhaitez un code lisible et auto-documenté qui référence les colonnes par leur nom et que vous traitez les lignes une à une.
Conclusion
mysqli_fetch_assoc() est la fonction de référence pour lire un résultat MySQLi sous forme de tableaux associatifs indexés par le nom des colonnes. Combinez-la avec une boucle while et une vérification rapide du succès de la requête pour parcourir les résultats en toute sécurité. Pour en savoir plus, consultez PHP MySQLi, les tableaux associatifs et la boucle while.