fetch_fields
Aprende a usar mysqli_fetch_fields() en PHP para obtener metadatos de las columnas de un resultado MySQLi: nombres, tipos, longitudes y más.
La función mysqli_fetch_fields() devuelve un array de objetos que describen las columnas (campos) de un conjunto de resultados MySQLi — sus nombres, tipos, longitudes, tablas de origen y flags. Lee metadatos sobre las columnas, no los datos de las filas en sí. Esta página explica la sintaxis, qué contiene cada objeto de campo, cuándo conviene usarla y los errores comunes.
Sintaxis
mysqli_fetch_fields(mysqli_result $result): arrayEn el estilo orientado a objetos, la misma llamada es $result->fetch_fields().
$result— un conjunto de resultados devuelto pormysqli_query(),mysqli_store_result()omysqli_use_result().- Valor de retorno — un array de objetos
stdClass, uno por columna, en el orden en que aparecen las columnas en el resultado. Cada objeto expone propiedades comoname,orgname,table,orgtable,type,length,max_length,decimalsyflags.
Qué contiene cada objeto de campo
| Propiedad | Descripción |
|---|---|
name | El nombre de la columna (o su alias, si usaste AS). |
orgname | El nombre original de la columna, sin tener en cuenta ningún alias. |
table | El nombre de la tabla (o su alias). |
orgtable | El nombre original de la tabla. |
max_length | El ancho del valor más amplio en el resultado (solo se establece después de mysqli_store_result()). |
length | El ancho definido de la columna tal como se declaró en el esquema. |
type | Un código de tipo entero (consulta las constantes MYSQLI_TYPE_*). |
decimals | Número de decimales para campos numéricos. |
flags | Una máscara de bits de flags MYSQLI_*_FLAG como NOT_NULL, PRI_KEY, AUTO_INCREMENT. |
¿Cuándo usarla?
Recurre a mysqli_fetch_fields() cuando necesites trabajar con el resultado de una consulta de forma genérica — sin conocer las columnas de antemano. Casos típicos:
- Construir un panel de administración o cuadrícula de datos que renderice cualquier consulta
SELECT *, usando los nombres de columna como encabezados de tabla. - Exportar resultados a CSV con una fila de encabezado.
- Inspeccionar si una columna es clave primaria o auto-incremento antes de generar un formulario de edición.
Si solo necesitas los nombres de las columnas, esta es la forma más directa de obtenerlos. Para obtener la descripción de un campo a la vez, usa mysqli_fetch_field(), y para contar las columnas usa mysqli_field_count().
Ejemplo: listar cada columna de un conjunto de resultados
<?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);
?>El bucle foreach recorre el array de objetos de campo e imprime el nombre, el código de tipo y la longitud definida de cada columna. Para las tres columnas seleccionadas, la salida tiene este aspecto:
Name: id, Type: 3, Length: 11
Name: name, Type: 253, Length: 255
Name: price, Type: 246, Length: 10Los valores numéricos de type provienen de las constantes MYSQLI_TYPE_* — por ejemplo, 3 es MYSQLI_TYPE_LONG (un INT) y 253 es MYSQLI_TYPE_VAR_STRING (un VARCHAR).
Construir un encabezado CSV a partir de los nombres de campo
Dado que el array de campos es genérico, puedes construir una fila de encabezado para cualquier consulta sin codificar los nombres de columna de forma fija:
<?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,pricearray_map() convierte el array de objetos de campo en un array simple de nombres, e implode() los une con comas.
Errores comunes
mysqli_fetch_fields()solo devuelve metadatos. No mueve el cursor de fila y no devuelve datos de fila — combínala conmysqli_fetch_assoc()omysqli_fetch_array()para leer las filas reales.max_lengthes0con resultados no almacenados en búfer. Solo se rellena cuando el conjunto de resultados completo está almacenado en el cliente mediantemysqli_store_result()(quemysqli_query()usa por defecto). Conmysqli_use_result(), el valor permanece en0.typeyflagsson enteros, no strings. Compáralos con las constantesMYSQLI_TYPE_*yMYSQLI_*_FLAGen lugar de números mágicos, para que la intención quede clara.- Siempre verifica que
$resultsea verdadero antes de llamar a la función — una consulta fallida devuelvefalse, y pasarfalsegenera un error.
Funciones relacionadas
mysqli_fetch_field()— obtiene los metadatos de una columna a la vez.mysqli_field_count()— cuenta las columnas del resultado.mysqli_field_seek()— mueve el cursor de campo a una columna específica.mysqli_fetch_assoc()— lee las filas del resultado como arrays asociativos.