mysqli_result::fetch_field

mysqli_fetch_field

(PHP 5, PHP 7)

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

Описание

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

object mysqli_result::fetch_field ( void )

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

object mysqli_fetch_field ( mysqli_result $result )

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

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

result

Только для процедурного стиля: Идентификатор результата запроса, полученный с помощью mysqli_query(), mysqli_store_result() или mysqli_use_result().

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

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

Свойства объекта
Свойство Описание
name Имя столбца
orgname Исходное имя столбца, если у него есть псевдоним
table Имя таблицы, которой принадлежит столбец (если не вычислено)
orgtable Исходное имя таблицы, если есть псевдоним
def Зарезервировано для значения по умолчанию, на данный момент всегда ""
db База данных (с PHP 5.3.6)
catalog Имя каталога, всегда "def" (с PHP 5.3.6)
max_length Максимальная ширина поля результирующего набора.
length Ширина поля, как она задана при определении таблицы.
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() - Установить указатель поля на определенное смещение

Коментарии

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'

?>
2008-09-17 08:16:18
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-field.html
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: 16
TINYINT: 1
BOOL: 1
SMALLINT: 2
MEDIUMINT: 9
INTEGER: 3
BIGINT: 8
SERIAL: 8
FLOAT: 4
DOUBLE: 5
DECIMAL: 246
NUMERIC: 246
FIXED: 246

dates
------------
DATE: 10
DATETIME: 12
TIMESTAMP: 7
TIME: 11
YEAR: 13

strings & binary
------------
CHAR: 254
VARCHAR: 253
ENUM: 254
SET: 254
BINARY: 254
VARBINARY: 253
TINYBLOB: 252
BLOB: 252
MEDIUMBLOB: 252
TINYTEXT: 252
TEXT: 252
MEDIUMTEXT: 252
LONGTEXT: 252
2011-10-06 23:24:08
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-field.html
Автор:
The constants for the TYPE number returned by fetch_field are enumerated here (MYSQLI_TYPE_*):
mysqli.constants
2012-02-16 22:20:11
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-field.html
Beware the values of the predefined constants.  They do not always correlate with the actual field types.  For example:

MYSQLI_TYPE_BLOB: 252
MYSQLI_TYPE_TINY_BLOB: 249
MYSQLI_TYPE_MEDIUM_BLOB: 250
MYSQLI_TYPE_LONG_BLOB: 251

MySQLi 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.
2013-01-20 22:19:31
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-field.html
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.

<?php

public 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);
}

?>
2014-04-19 11:13:09
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-field.html
The predefined constant values returned by the function get_predefined_constants() for:

MYSQLI_TYPE_CHAR = 1
MYSQLI _TYPE_TINYINT = 1

If 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 mysqli.field-count the values should be:

CHAR = 254
TINYINT = 1

But predefined function attributes the value 254 to MYSQLI_TYPE_STRING.

Just for FYI
2016-10-20 17:59:50
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-field.html
Автор:
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.
2017-11-10 14:48:56
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-field.html
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-type
The "flags" attribute: https://github.com/google/mysql/blob/master/include/mysql_com.h#L133

In 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
2018-03-15 14:55:14
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-field.html

    Поддержать сайт на родительском проекте КГБ