Тип данных mysqli_fetch_field PHP

Мне нужна некоторая помощь, отслеживающая небольшую подробную информацию об информации в методе fetch_field объекта результата mysqli.

В частности, свойство type – из документации кажется, что это поле возвращает целое число …

Большой!

Я просто не могу найти таблицу, которая позволит мне перевести номер в соответствующий тип данных. Я даже не уверен, что я ищу информацию о php или mysql . Толчок придет, чтобы засунуть. Я могу сам это перечислить, но я бы предпочел, чтобы кто-то мог указать мне на фактическую документацию.

Что мне не хватает?

Вы можете сравнить это число с различными предопределенными константами, которые перечислены здесь:

http://www.php.net/manual/en/mysqli.constants.php

например MYSQLI_TYPE_SHORT

Функция PHP mysqli_fetch_field() видимому, непосредственно сопоставляется с функцией MySQL C API mysql_fetch_field() , которая возвращает структуру C типа MYSQL_FIELD , определенную в mysql.h.

Поле type структуры представляет собой enum_field_types , который определяется следующим образом:

 enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, MYSQL_TYPE_LONGLONG, MYSQL_TYPE_INT24, MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, MYSQL_TYPE_BIT, MYSQL_TYPE_NEWDECIMAL=246, MYSQL_TYPE_ENUM=247, MYSQL_TYPE_SET=248, MYSQL_TYPE_TINY_BLOB=249, MYSQL_TYPE_MEDIUM_BLOB=250, MYSQL_TYPE_LONG_BLOB=251, MYSQL_TYPE_BLOB=252, MYSQL_TYPE_VAR_STRING=253, MYSQL_TYPE_STRING=254, MYSQL_TYPE_GEOMETRY=255 }; 

Сначала я хочу сказать, что я признаю разницу в 5 лет в этом ответе по сравнению с принятым ответом.

Хотя я чувствую, что принятый ответ указывает людям в правильном направлении, и я нашел много других ответов, которые указывают на этот пост, я не чувствую, что это надежный ответ на этот вопрос или многие другие, подобные ему, в частности, часть который говорит: «Это позволит мне перевести номер в соответствующий тип данных».

Для этого я решил вернуть пару функций, которые использовали php, которые уже обрабатывали это для нас, mysqli_field_flags ($ result, $ field_offset) и mysqli_field_type ($ result, $ field_offset), хотя mysqli_field_flags возвращает именно то, что старый mysql_field_flags (дайте мне знать, если кто-нибудь найдет что-то, что не работает точно так же, как старый, и мы можем его обновить, чтобы все могли получить к нему доступ). Второй, mysqli_field_type, фактически возвращает данные типа для поля, в отличие от mysql_field_type, который также возвращает флаги в одной строке.

Оба из них можно схватить отсюда, дайте мне знать, есть ли у вас проблемы. (далее, я не могу взять на себя полную ответственность за этот ответ, так как кредит принадлежит andre at koethur dot de для комментирования большей частью того, что нам нужно на веб-сайте php.net), я только что добавил этот прямой бит, чтобы получить наши номера , и скорректировали имена, чтобы лучше соответствовать схеме вещей, и поскольку для mysqli нет функций php mysqli_field_flags и mysqli_field_type, они работают как идеальные функции обратной совместимости.

ЕСЛИ ЭТИ ПОМОЩЬ ВАМ ВЫПОЛНИТЬ ПОЖАЛУЙСТА, ГОЛОСОВАТЬ, ЧТО ДРУГИЕ ПОЛУЧИТЕ СООБЩЕНИЕ, ЕСЛИ ОП ПРОЧИТАЕТ ЭТО ПОЖАЛУЙСТА, ИЗМЕНИТЬ ОТВЕТ;)

PHP 5.5 mysql_field_type «Функция обратной поддержки», mysqli_field_type (обратите внимание на i)

 /** * Returns a string that represents the mysql field type * * @param mysqli_resource $result The result resource that is being evaluated. This result comes from a call to mysql_query(). * @param integer $field_offset The numerical field offset. The field_offset starts at 0. If field_offset does not exist, an error of level E_WARNING is also issued. */ function mysqli_field_type( $result , $field_offset ) { static $types; $type_id = mysqli_fetch_field_direct($result,$field_offset)->type; 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; } 

PHP 5.5 mysql_field_flags «Функция обратной поддержки», mysqli_field_flags (обратите внимание на i)

 /** * Returns a string that represents the mysql field flags * * @param mysqli_resource $result The result resource that is being evaluated. This result comes from a call to mysql_query(). * @param integer $field_offset The numerical field offset. The field_offset starts at 0. If field_offset does not exist, an error of level E_WARNING is also issued. */ function mysqli_field_flags( $result , $field_offset ) { static $flags; // Get the field directly $flags_num = mysqli_fetch_field_direct($result,$field_offset)->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); $return = str_replace('PRI_KEY','PRIMARY_KEY',$return); $return = strtolower($return); return $return; } 

Я думаю, что это даст вам только несколько флагов; nullable или нет и т. д.

Возможно, вам лучше запросить информацию INFORMATION_SCHEMA.COLUMNS, чтобы получить такие детали.