fetch_field_direct
Функция mysqli_fetch_field_direct() в PHP: получение метаданных отдельного столбца по индексу из результата запроса.
Функция mysqli_fetch_field_direct() извлекает метаданные одного столбца в результирующем наборе, выбранного напрямую по его числовой позиции. Метаданные описывают сам столбец — его имя, таблицу, из которой он получен, тип данных, длину и флаги — а не значения строк, хранящихся в нём. На этой странице рассматриваются синтаксис, возвращаемый object, полный пример и случаи, когда следует использовать эту функцию вместо родственных.
Синтаксис
mysqli_fetch_field_direct(mysqli_result $result, int $index): object|falseВ объектно-ориентированном стиле тот же вызов выглядит как $result->fetch_field_direct($index).
$result— objectmysqli_result, возвращённый запросом, напримерmysqli_query()(илиmysqli_store_result()/mysqli_use_result()).$index— нулевая позиция нужного столбца. Первый столбец имеет индекс0, второй —1и так далее. Если индекс выходит за пределы диапазона, функция возвращаетfalse.
Возвращаемое значение — object, свойства которого описывают столбец. Если индекс недопустим, функция возвращает false.
Объект поля
Возвращаемый object предоставляет следующие свойства:
| Свойство | Описание |
|---|---|
name | Имя столбца (или его псевдоним, если он задан). |
orgname | Исходное имя столбца, если задан псевдоним. |
table | Имя таблицы, которой принадлежит столбец (или её псевдоним). |
orgtable | Исходное имя таблицы, если задан псевдоним. |
def | Значение по умолчанию для столбца в виде string. |
max_length | Максимальная ширина столбца для текущего результирующего набора. |
length | Объявленная ширина столбца, определённая в схеме таблицы. |
decimals | Количество десятичных знаков для числовых столбцов. |
type | Целочисленная константа, определяющая тип данных (см. ниже). |
flags | Целочисленное битовое поле флагов столбца (например, NOT NULL, первичный ключ). |
Как использовать mysqli_fetch_field_direct()
Передайте допустимый результирующий набор и индекс столбца, метаданные которого вам нужны:
<?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);
?>Здесь мы подключаемся с помощью mysqli_connect() и проверяем, не завершилось ли соединение ошибкой. Выполняем запрос с помощью mysqli_query() и при успехе вызываем mysqli_fetch_field_direct($result, 1), чтобы считать метаданные второго столбца (помните, что индекс начинается с нуля). Выводим несколько свойств и освобождаем результирующий набор по завершении. Поскольку type является целочисленной константой, а не читаемым именем, мы форматируем его с помощью %d.
Чтение константы типа
Свойство type — одна из констант MYSQLI_TYPE_*: целое число, а не слово вроде "varchar". Чтобы преобразовать её в читаемый вид, составьте сопоставление констант самостоятельно:
<?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})";
?>Когда использовать
Используйте mysqli_fetch_field_direct(), когда вы уже знаете, какой именно столбец вам нужен, и можете обратиться к нему по индексу — например, при построении универсального рендерера таблиц или при проверке того, что второй столбец действительно имеет ожидаемый тип.
- Чтобы последовательно обходить метаданные каждого столбца по одному, используйте
mysqli_fetch_field(), которая перемещает внутренний указатель при каждом вызове. - Чтобы получить метаданные всех столбцов сразу в виде array, используйте
mysqli_fetch_fields(). - Чтобы получить данные строк, а не метаданные столбцов, используйте
mysqli_fetch_assoc(),mysqli_fetch_row()илиmysqli_fetch_object(). - Чтобы узнать, сколько столбцов содержит результат, прежде чем обращаться к ним по индексу, используйте
mysqli_field_count().
Заключение
mysqli_fetch_field_direct() возвращает метаданные одного столбца, адресуемого напрямую по нулевому индексу, в виде object со свойствами имени, таблицы, типа, длины и флагов — либо false при недопустимом индексе. Она органично дополняет другие функции mysqli_fetch_field*, когда нужно изучить структуру результирующего набора, а не его строки.