W3docs

fetch_fields

Guida alla funzione mysqli_fetch_fields() in PHP per ottenere metadati sulle colonne di un risultato MySQLi.

La funzione mysqli_fetch_fields() restituisce un array di oggetti che descrivono le colonne (campi) di un result set MySQLi — i loro nomi, tipi, lunghezze, tabelle di origine e flag. Legge i metadati sulle colonne, non i dati delle righe stesse. Questa pagina spiega la sintassi, cosa contiene ciascun oggetto campo, quando utilizzarla e le insidie comuni.

Sintassi

mysqli_fetch_fields(mysqli_result $result): array

Nello stile orientato agli oggetti la stessa chiamata è $result->fetch_fields().

  • $result — un result set restituito da mysqli_query(), mysqli_store_result(), o mysqli_use_result().
  • Valore restituito — un array di oggetti stdClass, uno per colonna, nell'ordine in cui le colonne appaiono nel risultato. Ogni oggetto espone proprietà come name, orgname, table, orgtable, type, length, max_length, decimals e flags.

Cosa contiene ogni oggetto campo

ProprietàDescrizione
nameIl nome della colonna (o il suo alias, se è stato usato AS).
orgnameIl nome originale della colonna, ignorando eventuali alias.
tableIl nome della tabella (o il suo alias).
orgtableIl nome originale della tabella.
max_lengthLa larghezza del valore più lungo nel risultato (impostata solo dopo mysqli_store_result()).
lengthLa larghezza definita della colonna così come dichiarata nello schema.
typeUn codice di tipo intero (vedere le costanti MYSQLI_TYPE_*).
decimalsNumero di decimali per i campi numerici.
flagsUna bitmask di flag MYSQLI_*_FLAG come NOT_NULL, PRI_KEY, AUTO_INCREMENT.

Quando usarla?

Ricorri a mysqli_fetch_fields() quando hai bisogno di lavorare con un risultato di query in modo generico — senza conoscere le colonne in anticipo. Casi tipici:

  • Costruire una griglia di amministrazione/dati che visualizza qualsiasi query SELECT *, usando i nomi delle colonne come intestazioni di tabella.
  • Esportare i risultati in CSV con una riga di intestazione.
  • Verificare se una colonna è una chiave primaria o auto-increment prima di generare un modulo di modifica.

Se hai bisogno solo dei nomi delle colonne, questo è il modo più diretto per ottenerli. Per recuperare la descrizione di un campo alla volta, usa invece mysqli_fetch_field(), e per contare le colonne usa mysqli_field_count().

Esempio: elencare ogni colonna in un result set

<?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);
?>

Il ciclo foreach scorre l'array di oggetti campo e stampa il nome, il codice di tipo e la lunghezza definita di ciascuna colonna. Per le tre colonne selezionate l'output è simile a:

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

I valori numerici di type provengono dalle costanti MYSQLI_TYPE_* — ad esempio 3 è MYSQLI_TYPE_LONG (un INT) e 253 è MYSQLI_TYPE_VAR_STRING (un VARCHAR).

Costruire un'intestazione CSV dai nomi dei campi

Poiché l'array di campi è generico, puoi costruire una riga di intestazione per qualsiasi query senza codificare i nomi delle colonne in modo fisso:

<?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() trasforma l'array di oggetti campo in un semplice array di nomi, e implode() li unisce con le virgole.

Insidie comuni

  • mysqli_fetch_fields() restituisce solo metadati. Non sposta il cursore delle righe e non restituisce dati di riga — combinala con mysqli_fetch_assoc() o mysqli_fetch_array() per leggere le righe effettive.
  • max_length è 0 con risultati non bufferizzati. Viene popolata solo quando l'intero result set è bufferizzato sul client tramite mysqli_store_result() (usato di default da mysqli_query()). Con mysqli_use_result() il valore rimane 0.
  • type e flags sono interi, non stringhe. Confrontali con le costanti MYSQLI_TYPE_* e MYSQLI_*_FLAG anziché con numeri magici, così l'intento è chiaro.
  • Verifica sempre che $result sia truthy prima di chiamare la funzione — una query fallita restituisce false, e passare false genera un errore.

Funzioni correlate

Esercizio

Pratica
Cosa può fare la funzione fetch_field() in PHP?
Cosa può fare la funzione fetch_field() in PHP?
Was this page helpful?