W3docs

fetch_row

Découvrez la fonction mysqli_fetch_row() en PHP pour récupérer une ligne d'un résultat MySQLi sous forme de tableau énuméré.

La fonction mysqli_fetch_row() récupère une ligne d'un résultat MySQLi et la retourne sous forme de tableau énuméré — un simple tableau indexé numériquement où $row[0] correspond à la première colonne sélectionnée, $row[1] à la deuxième, et ainsi de suite. Cette page couvre sa syntaxe et sa valeur de retour, comment itérer sur un jeu de résultats, les styles procédural et orienté objet, quand le préférer aux alternatives, et les pièges à éviter.

Syntaxe

// Procedural style
mysqli_fetch_row(mysqli_result $result): array|null|false

// Object-oriented style
$result->fetch_row(): array|null|false

Le seul argument est $result — un objet résultat retourné par mysqli_query(), mysqli_store_result(), ou mysqli_use_result().

Valeur de retour

SituationValeur de retour
Une ligne a été lueUn tableau énuméré ($row[0], $row[1], …)
Plus aucune lignenull
Échecfalse

Chaque appel déplace un curseur interne vers la ligne suivante, ce qui lui permet de fonctionner proprement dans une boucle while. Les valeurs des colonnes sont retournées sous forme de string (ou null pour les valeurs SQL NULL), quel que soit le type SQL de la colonne, sauf si vous activez la conversion de types natifs via mysqlnd.

Exemple de base : itérer sur les lignes

Comme mysqli_fetch_row() retourne null une fois les lignes épuisées, la condition de la boucle se termine d'elle-même :

<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");

if (mysqli_connect_errno()) {
    die("Connection failed: " . mysqli_connect_error());
}

$result = mysqli_query($mysqli, "SELECT id, name FROM users");

if ($result) {
    while ($row = mysqli_fetch_row($result)) {
        // $row[0] = id, $row[1] = name (in the order they were SELECTed)
        printf("%s: %s\n", $row[0], $row[1]);
    }
    mysqli_free_result($result);
} else {
    echo "Query failed: " . mysqli_error($mysqli);
}

mysqli_close($mysqli);
?>

Nous nous connectons, vérifions s'il y a une erreur de connexion, puis exécutons un SELECT. À l'intérieur de la boucle while, chaque appel à mysqli_fetch_row() retourne la ligne suivante sous forme de tableau indexé dans l'ordre du SELECT — c'est précisément pourquoi il est recommandé de sélectionner des colonnes explicites (id, name) plutôt que SELECT * : cela fixe quel index correspond à quelle colonne.

Astuce : Appelez toujours mysqli_free_result() lorsque vous avez terminé avec un jeu de résultats pour libérer sa mémoire, surtout dans les scripts à longue durée d'exécution.

Style orienté objet

La même logique avec l'API OOP, utilisée par la plupart du code moderne :

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("Connection failed: " . $mysqli->connect_error);
}

$result = $mysqli->query("SELECT id, name FROM users");

while ($row = $result->fetch_row()) {
    printf("%s: %s\n", $row[0], $row[1]);
}

$result->free();
$mysqli->close();
?>

Quand utiliser mysqli_fetch_row()

Utilisez mysqli_fetch_row() lorsque :

  • Vous sélectionnez un petit ensemble fixe de colonnes et préférez un accès compact par index.
  • Vous copiez ou diffusez des lignes brutes et les noms de colonnes n'ont pas d'importance.
  • Vous souhaitez la récupération la moins coûteuse en ressources (aucun tableau à clés associatives n'est construit).

Préférez l'une des alternatives lorsque les noms ou les objets sont plus pratiques :

  • mysqli_fetch_assoc() — retourne un tableau associatif indexé par nom de colonne ($row['name']). Plus lisible et robuste si l'ordre du SELECT change.
  • mysqli_fetch_array() — retourne à la fois des clés numériques et associatives.
  • mysqli_fetch_object() — retourne chaque ligne sous forme d'object ($row->name).
  • mysqli_fetch_all() — retourne toutes les lignes en une seule fois dans un seul tableau.

Pièges courants

  • Les index suivent l'ordre du SELECT, pas l'ordre de la table. SELECT * rend $row fragile car l'ajout d'une colonne à la table décale silencieusement les index. Sélectionnez les colonnes explicitement.
  • Les valeurs sont des string. Une colonne numérique revient sous la forme "42", et non 42. Convertissez-la ((int) $row[0]) si vous avez besoin d'un vrai nombre.
  • null vs. false. Une boucle while traite les deux comme des valeurs fausses, donc elle se termine correctement dans les deux cas — mais si vous récupérez une seule ligne manuellement, distinguez « plus de lignes » (null) de « erreur » (false).
  • Avec ou sans tampon. Avec mysqli_use_result() (sans tampon), vous devez récupérer toutes les lignes avant d'exécuter une autre requête sur la même connexion.

Pour une vue d'ensemble de la connexion et des requêtes, consultez la présentation de MySQLi et mysqli_connect().

Entraînement

Pratique
Lesquelles des affirmations suivantes sont vraies concernant la fonction PHP mysqli_fetch_row() ?
Lesquelles des affirmations suivantes sont vraies concernant la fonction PHP mysqli_fetch_row() ?
Was this page helpful?