W3docs

fetch_field

Aprende a usar mysqli_fetch_field() en PHP para obtener metadatos de columnas de un resultado de consulta, con ejemplos y propiedades del objeto.

La función mysqli_fetch_field() devuelve metadatos sobre una columna — no los datos que contiene. Cada vez que la llamas, obtienes un object que describe la siguiente columna del conjunto de resultados: su nombre, tipo de datos, longitud, la tabla de la que proviene y diversas banderas. Esta página explica cuándo es útil, cómo se comporta la función, qué significa cada propiedad y cómo leerla tanto en estilo orientado a objetos como en estilo procedimental.

Qué hace mysqli_fetch_field()

mysqli_fetch_field() recorre las columnas de un conjunto de resultados de una en una, como un cursor. El conjunto de resultados mantiene un puntero de campo interno; cada llamada exitosa lo avanza en uno. Cuando llegas a la última columna, la siguiente llamada devuelve false, lo que resulta conveniente para manejar un bucle while.

Devuelve metadatos, por lo que nunca necesitas filas reales para usarla — una consulta que no devuelve ninguna fila sigue describiendo sus columnas. Esa es exactamente la razón por la que resulta práctica: puedes inspeccionar la estructura de un resultado antes de procesarlo.

Sintaxis (ambos estilos son equivalentes):

// Object-oriented style
$fieldInfo = $result->fetch_field();

// Procedural style
$fieldInfo = mysqli_fetch_field($result);

Recibe el conjunto de resultados como única entrada y devuelve un object en caso de éxito o false cuando no hay más campos.

Leer metadatos de columnas

El ejemplo siguiente conecta, ejecuta un SELECT y recorre las columnas del resultado. Cada iteración imprime el nombre, el código de tipo y la longitud máxima de la columna.

¿Cómo usar la función mysqli_fetch_field()?

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

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

$query = "SELECT * FROM my_table";
$result = $mysqli->query($query);

if ($result) {
    while ($field = $result->fetch_field()) {
        printf("Name: %s\n", $field->name);
        printf("Type: %s\n", $field->type);
        printf("Length: %d\n", $field->length);
    }
} else {
    echo "Query failed: " . $mysqli->error;
}

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

El bucle while ($field = $result->fetch_field()) termina naturalmente cuando fetch_field() devuelve false tras la última columna. Como el puntero de campo avanza en cada llamada, la primera iteración describe la primera columna, la segunda iteración la segunda columna, y así sucesivamente.

El object de campo y sus propiedades

Cada llamada devuelve un object similar a stdClass. Las propiedades más usadas son:

PropiedadSignificado
nameEl nombre de la columna tal como lo devuelve la consulta (un alias, si se usó uno)
orgnameEl nombre original de la columna, antes del alias
tableLa tabla a la que pertenece la columna (un alias, si se usó uno)
orgtableEl nombre original de la tabla
typeEl tipo de datos, como constante entera (ver más abajo)
lengthEl ancho declarado de la columna
max_lengthEl ancho máximo de los valores reales (a menudo 0 salvo que estén en búfer)
flagsUna máscara de bits de banderas de columna (NOT_NULL, PRI_KEY, …)
decimalsNúmero de decimales para campos numéricos

La propiedad type es un entero, no una cadena legible. PHP expone constantes como MYSQLI_TYPE_VARCHAR, MYSQLI_TYPE_LONG (una columna entera) y MYSQLI_TYPE_DATETIME para que puedas comparar contra ella:

if ($field->type === MYSQLI_TYPE_LONG) {
    echo "{$field->name} is an integer column\n";
}

Apuntar a una columna específica

fetch_field() es secuencial, así que para inspeccionar, por ejemplo, solo la tercera columna tendrías que recorrer el bucle hasta llegar a ella o reposicionar el puntero antes. El puntero de campo se puede reposicionar con field_seek(), y una sola columna puede obtenerse directamente por índice con fetch_field_direct():

// Jump to column index 2 (the third column), then read it
$result->field_seek(2);
$field = $result->fetch_field();
echo $field->name;

Cuándo usarla (y las alternativas)

Recurre a fetch_field() cuando quieras iterar sobre las columnas y reaccionar a cada una — por ejemplo, para generar automáticamente el encabezado de una tabla, construir un formulario o decidir cómo formatear cada valor según su tipo.

  • Si necesitas los metadatos de todas las columnas de una sola vez, fetch_fields() los devuelve todos como un array en una sola llamada, lo que suele ser más limpio que un bucle.
  • Si solo necesitas saber cuántas columnas hay, usa field_count.
  • Para leer los datos reales de las filas en lugar de los metadatos de las columnas, usa fetch_assoc() o fetch_array().

Conclusión

mysqli_fetch_field() te ofrece una vista columna a columna de la estructura de un conjunto de resultados: nombres, tipos, longitudes y banderas, avanzando por las columnas de una llamada en una llamada. Recórrela con un bucle para inspeccionar una consulta antes de procesar sus filas, combínala con field_seek() para apuntar a una columna concreta, o cámbiala por fetch_fields() cuando quieras todos los metadatos de una vez.

Práctica

Práctica
¿Qué hace la función fetch_field() en PHP?
¿Qué hace la función fetch_field() en PHP?
Was this page helpful?