mysqli_result::fetch_field

mysqli_fetch_field

(PHP 5, PHP 7, PHP 8)

mysqli_result::fetch_field -- mysqli_fetch_field Возвращает следующее поле результирующего набора

Описание

Объектно-ориентированный стиль

public mysqli_result::fetch_field(): object|false

Процедурный стиль

mysqli_fetch_field(mysqli_result $result): object|false

Метод возвращает информацию об одном столбце результирующего набора в виде объекта. Чтобы получить определения всех столбцов, просто запустите метод многократно.

Список параметров

result

Только для процедурного стиля: объект mysqli_result, который вернула функция mysqli_query(), mysqli_store_result(), mysqli_use_result() или mysqli_stmt_get_result().

Возвращаемые значения

Метод возвращает объект, который содержит определение поля или false, если столбцы в результирующей таблице закончились.

Свойства объекта
Свойство Описание
name Имя столбца
orgname Исходное имя столбца, если указали псевдоним
table Имя таблицы, которой принадлежит столбец (если не вычислено)
orgtable Исходное имя таблицы, если указали псевдоним
def Неиспользуемый. Всегда пустая строка
db Имя базы данных
catalog Неиспользуемый. Всегда «def»
max_length Максимальная ширина поля результирующего набора. Начиная с PHP 8.1 это значение всегда равно 0
length Ширина поля в байтах. Для строковых столбцов значение длины зависит от кодировки соединения. Например, если кодировка — latin1, однобайтовый набор символов, значение длины для запроса SELECT 'abc' равно 3. Если кодировка — utf8mb4, многобайтовый набор символов, в котором символы занимают до 4 байтов, значение длины равно 12
charsetnr Номер кодировки для поля
flags Целое число, которое представляет битовые флаги для поля
type Тип данных поля
decimals Количество десятичных знаков для числовых полей и точность долей секунды для временных полей

Примеры

Пример #1 Объектно-ориентированный стиль

<?php

$mysqli
= new mysqli("localhost", "my_user", "my_password", "world");

/* Проверяем подключение */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5";

if (
$result = $mysqli->query($query)) {

/* Получаем информацию о каждом столбце */
while ($finfo = $result->fetch_field()) {

printf("Имя: %s\n", $finfo->name);
printf("Таблица: %s\n", $finfo->table);
printf("Макс. длина: %d\n", $finfo->max_length);
printf("Флаги: %d\n", $finfo->flags);
printf("Тип: %d\n\n", $finfo->type);
}
$result->close();
}

/* Закрываем подключение */
$mysqli->close();

?>

Пример #2 Процедурный стиль

<?php

$link
= mysqli_connect("localhost", "my_user", "my_password", "world");

/* Проверяем подключение */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5";

if (
$result = mysqli_query($link, $query)) {

/* Получаем информацию о каждом столбце */
while ($finfo = mysqli_fetch_field($result)) {
printf("Имя: %s\n", $finfo->name);
printf("Таблица: %s\n", $finfo->table);
printf("Макс. длина: %d\n", $finfo->max_length);
printf("Флаги: %d\n", $finfo->flags);
printf("Тип: %d\n\n", $finfo->type);
}
mysqli_free_result($result);
}

/* Закрываем подключение */
mysqli_close($link);

?>

Результат выполнения приведённых примеров:

Имя:         Name
Таблица:     Country
Макс. длина: 11
Флаги:       1
Тип:         254

Имя:         SurfaceArea
Таблица:     Country
Макс. длина: 10
Флаги:       32769
Тип:         4

Смотрите также

  • mysqli_num_fields() - Получает количество полей в наборе результатов
  • mysqli_fetch_field_direct() - Получает метаданные конкретного поля
  • mysqli_fetch_fields() - Возвращает массив объектов, которые представляют поля результирующего набора
  • mysqli_field_seek() - Устанавливает указатель результата на заданное смещение поля

Добавить

Примечания пользователей 8 notes

up
52
iansoko at hotmail dot com
13 years ago
here are the data types that correspond to the TYPE number returned by fetch_field. thought i would post this here since i couldn't find the info elsewhere.numerics -------------BIT: 16TINYINT: 1BOOL: 1SMALLINT: 2MEDIUMINT: 9INTEGER: 3BIGINT: 8SERIAL: 8FLOAT: 4DOUBLE: 5DECIMAL: 246NUMERIC: 246FIXED: 246dates------------DATE: 10DATETIME: 12TIMESTAMP: 7TIME: 11YEAR: 13strings & binary------------CHAR: 254VARCHAR: 253ENUM: 254SET: 254BINARY: 254VARBINARY: 253TINYBLOB: 252BLOB: 252MEDIUMBLOB: 252TINYTEXT: 252TEXT: 252MEDIUMTEXT: 252LONGTEXT: 252
up
15
ragtag at hotmail dot com
16 years ago
The flags used by MySql are:                                                                                                                                                   NOT_NULL_FLAG = 1                                                                                     PRI_KEY_FLAG = 2                                                                                      UNIQUE_KEY_FLAG = 4                                                                                   BLOB_FLAG = 16                                                                                        UNSIGNED_FLAG = 32                                                                                    ZEROFILL_FLAG = 64                                                                                    BINARY_FLAG = 128                                                                                     ENUM_FLAG = 256                                                                                       AUTO_INCREMENT_FLAG = 512                                                                             TIMESTAMP_FLAG = 1024                                                                                 SET_FLAG = 2048                                                                                       NUM_FLAG = 32768                                                                                      PART_KEY_FLAG = 16384                                                                                 GROUP_FLAG = 32768                                                                                    UNIQUE_FLAG = 65536                                                                            To test if a flag is set you can use & like so:<?php$meta = $mysqli_result_object->fetch_field();if ($meta->flags & 4) {   echo 'Unique key flag is set'; } ?>
up
3
andre at koethur dot de
11 years ago
Here are two methods for converting the 'type' and 'flags' attributes to text for debugging purposes. They both use the predefined MYSQLI_ constants to generate the text.<?phppublic static function h_type2txt($type_id){    static $types;    if (!isset($types))    {        $types = array();        $constants = get_defined_constants(true);        foreach ($constants['mysqli'] as $c => $n) if (preg_match('/^MYSQLI_TYPE_(.*)/', $c, $m)) $types[$n] = $m[1];    }    return array_key_exists($type_id, $types)? $types[$type_id] : NULL;}public static function h_flags2txt($flags_num){    static $flags;    if (!isset($flags))    {        $flags = array();        $constants = get_defined_constants(true);        foreach ($constants['mysqli'] as $c => $n) if (preg_match('/MYSQLI_(.*)_FLAG$/', $c, $m)) if (!array_key_exists($n, $flags)) $flags[$n] = $m[1];    }    $result = array();    foreach ($flags as $n => $t) if ($flags_num & $n) $result[] = $t;    return implode(' ', $result);}?>
up
1
sofe2038 at gmail dot com
7 years ago
The constants in a few other comments above appear to be inaccurate. Here are some more official references that seem quite hard to search.The "type" attribute: https://dev.mysql.com/doc/internals/en/com-query-response.html#column-typeThe "flags" attribute: https://github.com/google/mysql/blob/master/include/mysql_com.h#L133In addition, all attributes are explained on the COM_QUERY_RESPONSE page too: https://dev.mysql.com/doc/internals/en/com-query-response.html#column-definition
up
1
rvila at revolutionvisualarts dot com
8 years ago
The predefined constant values returned by the function get_predefined_constants() for:MYSQLI_TYPE_CHAR = 1MYSQLI _TYPE_TINYINT = 1If the code is used to categorized the type of field use this values will of course create confusion. For example:if($fieldtype === "CHAR"){    $field_html_attribute = "text";    $field_html_length = 1;} elseif($fieldtype === "TINYINT") {    $field_html_attribute = "number";    $field_html_length = 1;}If an array is created to set the key as the numeric value and the value of that key as the the text title, TINYINT will be replaced by CHAR value. But is this process is reversed, then the code will select TINYINT if the foreach statement set to break when the numeric value of the flag equals the value of the current key as the first intance.Base in the note added by Johnathan at http://php.net/manual/en/mysqli.field-count.php the values should be:CHAR = 254TINYINT = 1But predefined function attributes the value 254 to MYSQLI_TYPE_STRING.Just for FYI
up
2
miqrogroove at gmail dot com
12 years ago
Beware the values of the predefined constants.  They do not always correlate with the actual field types.  For example:MYSQLI_TYPE_BLOB: 252MYSQLI_TYPE_TINY_BLOB: 249MYSQLI_TYPE_MEDIUM_BLOB: 250MYSQLI_TYPE_LONG_BLOB: 251MySQLi will indeed return a value of 252 for a tinytext field, but as you can see, this does not correspond to the value of MYSQLI_TYPE_TINY_BLOB.
up
0
nick
7 years ago
It is not possible to get the values for an enum or set field through fetch_fields(). As far as I can tell this is because it hasn't been implemented in the mysqlnd api but whatever the reason it is not possible and you must issue a query like SHOW COLUMNS directly and interrogate the result to determine them.Incidentally you need to check the enum_flag rather than look for the enum_type to determine whether a field is enum or not. The type returned is usually some kind of string.
up
2
Anonymous
13 years ago
The constants for the TYPE number returned by fetch_field are enumerated here (MYSQLI_TYPE_*):http://php.net/manual/en/mysqli.constants.php
To Top