W3docs

fetch_fields

Découvrez la fonction mysqli_fetch_fields() en PHP pour récupérer les métadonnées des colonnes d'un résultat MySQLi.

La fonction mysqli_fetch_fields() retourne un array d'objets décrivant les colonnes (champs) d'un résultat MySQLi — leurs noms, types, longueurs, tables sources et indicateurs. Elle lit les métadonnées des colonnes, et non les données des lignes elles-mêmes. Cette page explique la syntaxe, ce que contient chaque object champ, quand l'utiliser et les pièges courants.

Syntaxe

mysqli_fetch_fields(mysqli_result $result): array

Dans le style orienté objet, le même appel s'écrit $result->fetch_fields().

  • $result — un résultat retourné par mysqli_query(), mysqli_store_result(), ou mysqli_use_result().
  • Valeur de retour — un array d'objets stdClass, un par colonne, dans l'ordre où les colonnes apparaissent dans le résultat. Chaque object expose des propriétés telles que name, orgname, table, orgtable, type, length, max_length, decimals et flags.

Ce que contient chaque object champ

PropriétéDescription
nameLe nom de la colonne (ou son alias, si vous avez utilisé AS).
orgnameLe nom de colonne original, sans tenir compte de l'alias.
tableLe nom de la table (ou son alias).
orgtableLe nom de table original.
max_lengthLa largeur de la valeur la plus longue dans le résultat (définie uniquement après mysqli_store_result()).
lengthLa largeur définie de la colonne telle que déclarée dans le schéma.
typeUn code de type entier (voir les constantes MYSQLI_TYPE_*).
decimalsNombre de décimales pour les champs numériques.
flagsUn masque de bits des indicateurs MYSQLI_*_FLAG tels que NOT_NULL, PRI_KEY, AUTO_INCREMENT.

Quand l'utiliser ?

Utilisez mysqli_fetch_fields() lorsque vous devez travailler avec un résultat de requête de manière générique — sans connaître les colonnes à l'avance. Cas typiques :

  • Construire une grille d'administration/données qui affiche n'importe quelle requête SELECT *, en utilisant les noms de colonnes comme en-têtes de tableau.
  • Exporter les résultats en CSV avec une ligne d'en-tête.
  • Vérifier si une colonne est une clé primaire ou en auto-incrémentation avant de générer un formulaire d'édition.

Si vous avez seulement besoin des noms de colonnes, c'est la méthode la plus directe pour les obtenir. Pour récupérer la description d'un seul champ à la fois, utilisez plutôt mysqli_fetch_field(), et pour compter les colonnes utilisez mysqli_field_count().

Exemple : lister toutes les colonnes d'un résultat

<?php
$mysqli = mysqli_connect("localhost", "user", "password", "shop");

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

$fields = mysqli_fetch_fields($result);

foreach ($fields as $field) {
    printf("Name: %s, Type: %d, Length: %d\n",
        $field->name, $field->type, $field->length);
}

mysqli_free_result($result);
mysqli_close($mysqli);
?>

La boucle foreach parcourt l'array d'objets champ et affiche le nom, le code de type et la longueur définie de chaque colonne. Pour les trois colonnes sélectionnées, la sortie ressemble à :

Name: id, Type: 3, Length: 11
Name: name, Type: 253, Length: 255
Name: price, Type: 246, Length: 10

Les valeurs type numériques proviennent des constantes MYSQLI_TYPE_* — par exemple 3 correspond à MYSQLI_TYPE_LONG (un INT) et 253 à MYSQLI_TYPE_VAR_STRING (un VARCHAR).

Construire un en-tête CSV à partir des noms de champs

Comme l'array de champs est générique, vous pouvez construire une ligne d'en-tête pour n'importe quelle requête sans coder les noms de colonnes en dur :

<?php
$result = mysqli_query($mysqli, "SELECT * FROM products");

$header = array_map(
    fn($field) => $field->name,
    mysqli_fetch_fields($result)
);

echo implode(",", $header), "\n"; // id,name,price

array_map() transforme l'array d'objets champ en un simple array de noms, et implode() les joint avec des virgules.

Pièges courants

  • mysqli_fetch_fields() ne fournit que des métadonnées. Elle ne déplace pas le curseur de ligne et ne retourne aucune donnée de ligne — combinez-la avec mysqli_fetch_assoc() ou mysqli_fetch_array() pour lire les lignes réelles.
  • max_length vaut 0 avec des résultats non mis en mémoire tampon. Elle n'est renseignée que lorsque le résultat complet est mis en mémoire tampon côté client via mysqli_store_result() (ce que mysqli_query() utilise par défaut). Avec mysqli_use_result(), la valeur reste 0.
  • type et flags sont des entiers, pas des string. Comparez-les avec les constantes MYSQLI_TYPE_* et MYSQLI_*_FLAG plutôt qu'avec des nombres magiques, afin que l'intention soit claire.
  • Vérifiez toujours que $result est vrai avant d'appeler la fonction — une requête échouée retourne false, et passer false provoque une erreur.

Fonctions liées

Pratique

Pratique
Que permet de faire la fonction fetch_field() en PHP ?
Que permet de faire la fonction fetch_field() en PHP ?
Was this page helpful?