fetch_field_direct
In questo articolo ci concentriamo sulla funzione mysqli_fetch_field_direct() in PHP, usata per recuperare i metadati di una singola colonna tramite indice
La funzione mysqli_fetch_field_direct() recupera i metadati di una singola colonna in un result set, selezionata direttamente tramite la sua posizione numerica. I metadati descrivono la colonna stessa — il nome, la tabella di appartenenza, il tipo di dato, la lunghezza e i flag — e non i valori delle righe contenuti in essa. Questa pagina illustra la sintassi, l'object restituito, un esempio completo e quando preferirla rispetto alle funzioni correlate.
Sintassi
mysqli_fetch_field_direct(mysqli_result $result, int $index): object|falseIn stile orientato agli oggetti la stessa chiamata diventa $result->fetch_field_direct($index).
$result— un objectmysqli_resultrestituito da una query comemysqli_query()(oppuremysqli_store_result()/mysqli_use_result()).$index— la posizione a base zero della colonna desiderata. La prima colonna è0, la seconda è1e così via. Un indice fuori intervallo fa restituirefalsealla funzione.
Il valore restituito è un object le cui proprietà descrivono la colonna. Se l'indice non è valido, la funzione restituisce false.
L'object field
L'object restituito espone le seguenti proprietà:
| Proprietà | Descrizione |
|---|---|
name | Il nome della colonna (o il suo alias, se ne è stato usato uno). |
orgname | Il nome originale della colonna se è stato impostato un alias. |
table | Il nome della tabella a cui appartiene la colonna (o il suo alias). |
orgtable | Il nome originale della tabella se è stato impostato un alias. |
def | Il valore predefinito della colonna, come string. |
max_length | La larghezza massima della colonna per il result set corrente. |
length | La larghezza dichiarata della colonna, come definita nello schema della tabella. |
decimals | Il numero di decimali per le colonne numeriche. |
type | Una costante intera che identifica il tipo di dato (vedi sotto). |
flags | Un campo bit intero dei flag della colonna (es. NOT NULL, chiave primaria). |
Come usare mysqli_fetch_field_direct()
Passa un result set valido e l'indice della colonna di cui hai bisogno i metadati:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);
if ($result) {
// Metadata for the second column (index 1, zero-based)
$field = mysqli_fetch_field_direct($result, 1);
printf("Name: %s\n", $field->name);
printf("Table: %s\n", $field->table);
printf("Type: %d\n", $field->type); // integer type constant
printf("Length: %d\n", $field->length);
mysqli_free_result($result);
} else {
echo "Query failed: " . mysqli_error($mysqli);
}
mysqli_close($mysqli);
?>Qui ci connettiamo con mysqli_connect() e ci proteggiamo da un'eventuale connessione fallita. Eseguiamo una query con mysqli_query() e, se ha successo, chiamiamo mysqli_fetch_field_direct($result, 1) per leggere i metadati della seconda colonna (ricorda che l'indice è a base zero). Stampiamo alcune delle sue proprietà e liberiamo il result set al termine. Poiché type è una costante intera e non un nome leggibile, la formattiamo con %d.
Leggere la costante type
La proprietà type è una delle costanti MYSQLI_TYPE_* — un intero, non una parola come "varchar". Per trasformarla in qualcosa di leggibile, mappa le costanti manualmente:
<?php
$types = [
MYSQLI_TYPE_DECIMAL => 'DECIMAL',
MYSQLI_TYPE_LONG => 'INT',
MYSQLI_TYPE_VAR_STRING => 'VARCHAR',
MYSQLI_TYPE_STRING => 'CHAR',
MYSQLI_TYPE_DATETIME => 'DATETIME',
];
$field = mysqli_fetch_field_direct($result, 0);
echo $types[$field->type] ?? "Unknown ({$field->type})";
?>Quando usarla
Ricorri a mysqli_fetch_field_direct() quando sai già quale colonna ti serve e puoi indirizzarla per indice — ad esempio per costruire un renderer generico di tabelle o per verificare che la seconda colonna sia davvero del tipo atteso.
- Per scorrere i metadati di ogni colonna uno alla volta, usa
mysqli_fetch_field(), che avanza un puntatore interno a ogni chiamata. - Per ottenere i metadati di tutte le colonne in una volta sola come array, usa
mysqli_fetch_fields(). - Per recuperare i dati delle righe invece dei metadati delle colonne, usa
mysqli_fetch_assoc(),mysqli_fetch_row()omysqli_fetch_object(). - Per sapere quante colonne ha il result set prima di indicizzarle, usa
mysqli_field_count().
Conclusione
mysqli_fetch_field_direct() ti fornisce i metadati di una colonna indirizzata direttamente tramite il suo indice a base zero, restituendo un object con il nome, la tabella, il tipo, la lunghezza e i flag della colonna — oppure false per un indice fuori intervallo. Si abbina naturalmente alle altre funzioni mysqli_fetch_field* quando è necessario esaminare la struttura di un result set piuttosto che i suoi dati.