©
This document uses PHP Chinese website manual Release
(PHP 5)
mysqli_result::fetch_field -- mysqli_fetch_field — Returns the next field in the result set
面向对象风格
过程化风格
$result
)Returns the definition of one column of a result set as an object. Call this function repeatedly to retrieve information about all columns in the result set.
result
仅以过程化样式:由 mysqli_query() , mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识。
Returns an object which contains field definition information or FALSE
if no field information is available.
Property | Description |
---|---|
name | The name of the column |
orgname | Original column name if an alias was specified |
table | The name of the table this field belongs to (if not calculated) |
orgtable | Original table name if an alias was specified |
def | Reserved for default value, currently always "" |
db | Database (since PHP 5.3.6) |
catalog | The catalog name, always "def" (since PHP 5.3.6) |
max_length | The maximum width of the field for the result set. |
length | The width of the field, as specified in the table definition. |
charsetnr | The character set number for the field. |
flags | An integer representing the bit-flags for the field. |
type | The data type used for this field |
decimals | The number of decimals used (for integer fields) |
Example #1 面向对象风格
<?php
$mysqli = new mysqli ( "localhost" , "my_user" , "my_password" , "world" );
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 )) {
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 ();
}
$mysqli -> close ();
?>
Example #2 过程化风格
<?php
$link = mysqli_connect ( "localhost" , "my_user" , "my_password" , "world" );
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 )) {
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 );
}
mysqli_close ( $link );
?>
以上例程会输出:
Name: Name Table: Country max. Len: 11 Flags: 1 Type: 254Name: SurfaceArea Table: Country max. Len: 10 Flags: 32769 Type: 4
[#1] andre at koethur dot de [2014-04-19 08:13:09]
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);
}
?>
[#2] miqrogroove at gmail dot com [2013-01-20 20:19:31]
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.
[#3] Anonymous [2012-02-16 20:20:11]
The constants for the TYPE number returned by fetch_field are enumerated here (MYSQLI_TYPE_*):
http://php.net/manual/en/mysqli.constants.php
[#4] iansoko at hotmail dot com [2011-10-06 20:24:08]
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
[#5] ragtag at hotmail dot com [2008-09-17 05:16:18]
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';
}
?>