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: 252mysqli_result::fetch_field
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
mysqli_result::fetch_field
Референца за `mysqli-result.fetch-field.php` со подобрена типографија и навигација.
mysqli_result::fetch_field
mysqli_fetch_field
класата mysqli_driver
mysqli_result::fetch_field -- mysqli_fetch_field — Враќа следно поле во множеството резултати
= NULL
Напиши целосна ознака на елемент
Процедурален стил
Враќа дефиниција на една колона од множеството резултати како објект. Повикајте ја оваа функција повеќепати за да добиете информации за сите колони во множеството резултати.
Параметри
-
result објектот како свој прв аргумент. mysqli_result Само процедурален стил: А mysqli_query(), mysqli_store_result(), mysqli_use_result() or mysqli_stmt_get_result().
Вратени вредности
Враќа објект кој содржи информации за дефиницијата на полето или false
ако нема достапни информации за полето.
| Својство | = NULL |
|---|---|
| name | Име на колоната |
| orgname | Оригинално име на колоната ако е наведен новитет |
| table | Име на табелата на која припаѓа ова поле (ако не е пресметано) |
| orgtable | Оригинално име на табелата ако е наведен новитет |
| def | Неискористено. Секогаш празен стринг |
| db | Враќа листа на имиња на табели од MySQL база на податоци. |
| 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");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5";
if ($result = $mysqli->query($query)) {
/* Get field information for all columns */
while ($finfo = $result->fetch_field()) {
printf("Name: %s\n", $finfo->name);
printf("Table: %s\n", $finfo->table);
printf("max. Len: %d\n", $finfo->max_length);
printf("Flags: %d\n", $finfo->flags);
printf("Type: %d\n\n", $finfo->type);
}
$result->close();
}
/* close connection */
$mysqli->close();
?>Пример #2 Процедурален стил
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5";
if ($result = mysqli_query($link, $query)) {
/* Get field information for all fields */
while ($finfo = mysqli_fetch_field($result)) {
printf("Name: %s\n", $finfo->name);
printf("Table: %s\n", $finfo->table);
printf("max. Len: %d\n", $finfo->max_length);
printf("Flags: %d\n", $finfo->flags);
printf("Type: %d\n\n", $finfo->type);
}
mysqli_free_result($result);
}
/* close connection */
mysqli_close($link);
?>Горните примери ќе дадат излез:
Name: Name Table: Country max. Len: 11 Flags: 1 Type: 254 Name: SurfaceArea Table: Country max. Len: 10 Flags: 32769 Type: 4
Види Исто така
- mysqli_num_fields() Бројот на децимални места за нумерички полиња и прецизноста на фракционите секунди за временски полиња.
- mysqli_fetch_field_direct() - Преземање мета-податоци за едно поле
- mysqli_fetch_fields() - Враќа следното поле во множеството резултати
- mysqli_field_seek() - Поставете покажувач на резултатот на одреден офсет на полето
Белешки од корисници 8 белешки
The constants for the TYPE number returned by fetch_field are enumerated here (MYSQLI_TYPE_*):
http://php.net/manual/en/mysqli.constants.phpThe 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';
}
?>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);
}
?>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-definitionThe 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 http://php.net/manual/en/mysqli.field-count.php the values should be:
CHAR = 254
TINYINT = 1
But predefined function attributes the value 254 to MYSQLI_TYPE_STRING.
Just for FYIIt 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.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.