W3docs

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|false

In stile orientato agli oggetti la stessa chiamata diventa $result->fetch_field_direct($index).

  • $result — un object mysqli_result restituito da una query come mysqli_query() (oppure mysqli_store_result() / mysqli_use_result()).
  • $index — la posizione a base zero della colonna desiderata. La prima colonna è 0, la seconda è 1 e così via. Un indice fuori intervallo fa restituire false alla 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
nameIl nome della colonna (o il suo alias, se ne è stato usato uno).
orgnameIl nome originale della colonna se è stato impostato un alias.
tableIl nome della tabella a cui appartiene la colonna (o il suo alias).
orgtableIl nome originale della tabella se è stato impostato un alias.
defIl valore predefinito della colonna, come string.
max_lengthLa larghezza massima della colonna per il result set corrente.
lengthLa larghezza dichiarata della colonna, come definita nello schema della tabella.
decimalsIl numero di decimali per le colonne numeriche.
typeUna costante intera che identifica il tipo di dato (vedi sotto).
flagsUn 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.

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.

Esercizio

Pratica
Cosa fa la funzione fetch_field_direct() in PHP?
Cosa fa la funzione fetch_field_direct() in PHP?
Was this page helpful?