W3docs

fetch_fields

Функция mysqli_fetch_fields() в PHP возвращает массив объектов с описанием столбцов результата MySQLi: имена, типы, длины и флаги.

Функция mysqli_fetch_fields() возвращает массив объектов, описывающих столбцы (поля) результирующего набора MySQLi — их имена, типы, длины, исходные таблицы и флаги. Она читает метаданные о столбцах, а не сами данные строк. На этой странице объясняется синтаксис, содержимое каждого объекта поля, когда стоит её использовать и типичные ловушки.

Синтаксис

mysqli_fetch_fields(mysqli_result $result): array

В объектно-ориентированном стиле тот же вызов выглядит как $result->fetch_fields().

  • $result — результирующий набор, возвращённый функцией mysqli_query(), mysqli_store_result() или mysqli_use_result().
  • Возвращаемое значение — массив объектов stdClass, по одному на каждый столбец, в порядке их следования в результате. Каждый объект содержит такие свойства, как name, orgname, table, orgtable, type, length, max_length, decimals и flags.

Что содержит каждый объект поля

СвойствоОписание
nameИмя столбца (или его псевдоним, если использовался AS).
orgnameИсходное имя столбца без учёта псевдонима.
tableИмя таблицы (или её псевдоним).
orgtableИсходное имя таблицы.
max_lengthШирина наибольшего значения в результате (заполняется только после mysqli_store_result()).
lengthОбъявленная ширина столбца согласно схеме.
typeЦелочисленный код типа (см. константы MYSQLI_TYPE_*).
decimalsКоличество знаков после запятой для числовых полей.
flagsБитовая маска флагов MYSQLI_*_FLAG, таких как NOT_NULL, PRI_KEY, AUTO_INCREMENT.

Когда это использовать?

Обращайтесь к mysqli_fetch_fields(), когда нужно работать с результатом запроса обобщённо — не зная столбцов заранее. Типичные случаи:

  • Построение административной таблицы данных, отображающей любой SELECT *, с использованием имён столбцов в качестве заголовков.
  • Экспорт результатов в CSV со строкой заголовка.
  • Проверка, является ли столбец первичным ключом или auto-increment, перед генерацией формы редактирования.

Если нужны только имена столбцов — это наиболее прямой способ их получить. Чтобы получать описание одного поля за раз, используйте mysqli_fetch_field(), а для подсчёта столбцов — mysqli_field_count().

Пример: вывод всех столбцов результирующего набора

<?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);
?>

Цикл foreach обходит массив объектов полей и выводит имя, код типа и объявленную длину каждого столбца. Для трёх выбранных столбцов вывод будет выглядеть так:

Name: id, Type: 3, Length: 11
Name: name, Type: 253, Length: 255
Name: price, Type: 246, Length: 10

Числовые значения type берутся из констант MYSQLI_TYPE_* — например, 3 соответствует MYSQLI_TYPE_LONG (INT), а 253MYSQLI_TYPE_VAR_STRING (VARCHAR).

Формирование заголовка CSV из имён полей

Поскольку массив полей является обобщённым, можно сформировать строку заголовка для любого запроса без жёсткой фиксации имён столбцов:

<?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,price

array_map() преобразует массив объектов полей в простой массив имён, а implode() соединяет их запятыми.

Типичные ловушки

  • mysqli_fetch_fields() работает только с метаданными. Она не перемещает курсор строк и не возвращает данные строк — сочетайте её с mysqli_fetch_assoc() или mysqli_fetch_array() для чтения реальных строк.
  • max_length равен 0 при небуферизованных результатах. Это свойство заполняется, только если весь результирующий набор буферизован на клиенте через mysqli_store_result() (что mysqli_query() делает по умолчанию). При использовании mysqli_use_result() значение остаётся 0.
  • type и flags — целые числа, а не строки. Сравнивайте их с константами MYSQLI_TYPE_* и MYSQLI_*_FLAG, а не с магическими числами, чтобы код был понятен.
  • Всегда проверяйте, что $result является истинным значением перед вызовом функции — неудачный запрос возвращает false, а передача false вызывает ошибку.

Связанные функции

  • mysqli_fetch_field() — получить метаданные одного столбца за раз.
  • mysqli_field_count() — подсчитать столбцы в результате.
  • mysqli_field_seek() — переместить курсор поля на конкретный столбец.
  • mysqli_fetch_assoc() — читать строки результата как ассоциативные массивы.

Практика

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