fetch_field_direct
En este artículo nos centraremos en la función mysqli_fetch_field_direct() de PHP, usada para obtener metadatos de una columna por su índice numérico
La función mysqli_fetch_field_direct() obtiene los metadatos de una sola columna en un conjunto de resultados, seleccionada directamente por su posición numérica. Los metadatos describen la propia columna — su nombre, la tabla de la que proviene, su tipo de datos, longitud y flags — en lugar de los valores de fila almacenados en ella. Esta página cubre la sintaxis, el object que devuelve, un ejemplo completo y cuándo utilizarla en lugar de las funciones relacionadas.
Sintaxis
mysqli_fetch_field_direct(mysqli_result $result, int $index): object|falseEn estilo orientado a objetos, la misma llamada es $result->fetch_field_direct($index).
$result— un objectmysqli_resultdevuelto por una consulta comomysqli_query()(omysqli_store_result()/mysqli_use_result()).$index— la posición basada en cero de la columna que deseas. La primera columna es0, la segunda es1, y así sucesivamente. Un índice fuera de rango hace que la función devuelvafalse.
El valor de retorno es un object cuyas propiedades describen la columna. Si el índice no es válido, la función devuelve false.
El object field
El object devuelto expone las siguientes propiedades:
| Propiedad | Descripción |
|---|---|
name | El nombre de la columna (o su alias, si se utilizó uno). |
orgname | El nombre original de la columna si se estableció un alias. |
table | El nombre de la tabla a la que pertenece la columna (o su alias). |
orgtable | El nombre original de la tabla si se estableció un alias. |
def | El valor predeterminado de la columna, como string. |
max_length | El ancho máximo de la columna para el conjunto de resultados actual. |
length | El ancho declarado de la columna, tal como se definió en el esquema de la tabla. |
decimals | El número de decimales para columnas numéricas. |
type | Una constante entera que identifica el tipo de datos (ver más abajo). |
flags | Un campo de bits entero con los flags de la columna (p. ej. NOT NULL, clave primaria). |
Cómo usar mysqli_fetch_field_direct()
Pasa un conjunto de resultados válido y el índice de la columna cuyos metadatos necesitas:
<?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);
?>Aquí nos conectamos con mysqli_connect() y protegemos contra una conexión fallida. Ejecutamos una consulta con mysqli_query() y, si tiene éxito, llamamos a mysqli_fetch_field_direct($result, 1) para leer los metadatos de la segunda columna (recuerda que el índice es basado en cero). Imprimimos algunas de sus propiedades y liberamos el conjunto de resultados cuando terminamos. Como type es una constante entera en lugar de un nombre legible, lo formateamos con %d.
Interpretar la constante de tipo
La propiedad type es una de las constantes MYSQLI_TYPE_* — un entero, no una palabra como "varchar". Para convertirla en algo legible, mapea las constantes tú mismo:
<?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})";
?>Cuándo utilizarla
Recurre a mysqli_fetch_field_direct() cuando ya sabes qué columna quieres y puedes direccionarla por índice — por ejemplo, al construir un renderizador de tablas genérico o al validar que la segunda columna realmente es del tipo que esperas.
- Para recorrer los metadatos de cada columna de una en una, usa
mysqli_fetch_field(), que avanza un puntero interno con cada llamada. - Para obtener los metadatos de todas las columnas a la vez como un array, usa
mysqli_fetch_fields(). - Para obtener los datos de fila en lugar de los metadatos de columna, usa
mysqli_fetch_assoc(),mysqli_fetch_row()omysqli_fetch_object(). - Para saber cuántas columnas tiene el resultado antes de indexarlas, usa
mysqli_field_count().
Conclusión
mysqli_fetch_field_direct() te proporciona los metadatos de una columna direccionada directamente por su índice basado en cero, devolviendo un object con el nombre, tabla, tipo, longitud y flags de la columna — o false para un índice fuera de rango. Se combina de forma natural con las otras funciones mysqli_fetch_field* cuando necesitas inspeccionar la estructura de un conjunto de resultados en lugar de sus filas.