W3docs

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 — object mysqli_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*, когда нужно изучить структуру результирующего набора, а не его строки.

Практика

Практика
Что делает функция fetch_field_direct() в PHP?
Что делает функция fetch_field_direct() в PHP?
Was this page helpful?