©
本文档使用 PHP中文网手册 发布
(PHP 5)
mysqli_result::fetch_fields -- mysqli_fetch_fields — Returns an array of objects representing the fields in a result set
面向对象风格
过程化风格
$result
)This function serves an identical purpose to the mysqli_fetch_field() function with the single difference that, instead of returning one object at a time for each field, the columns are returned as an array of objects.
result
仅以过程化样式:由 mysqli_query() , mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识。
Returns an array of objects 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 |
max_length | The maximum width of the field for the result set. |
length | The width of the field, in bytes, as specified in the table definition. Note that this number (bytes) might differ from your table definition value (characters), depending on the character set you use. For example, the character set utf8 has 3 bytes per character, so varchar(10) will return a length of 30 for utf8 (10*3), but return 10 for latin1 (10*1). |
charsetnr | The character set number (id) 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 ( "127.0.0.1" , "root" , "foofoo" , "sakila" );
if ( $mysqli -> connect_errno ) {
printf ( "Connect failed: %s\n" , $mysqli -> connect_error );
exit();
}
foreach (array( 'latin1' , 'utf8' ) as $charset ) {
// Set character set, to show its impact on some values (e.g., length in bytes)
$mysqli -> set_charset ( $charset );
$query = "SELECT actor_id, last_name from actor ORDER BY actor_id" ;
echo "======================\n" ;
echo "Character Set: $charset \n" ;
echo "======================\n" ;
if ( $result = $mysqli -> query ( $query )) {
$finfo = $result -> fetch_fields ();
foreach ( $finfo as $val ) {
printf ( "Name: %s\n" , $val -> name );
printf ( "Table: %s\n" , $val -> table );
printf ( "Max. Len: %d\n" , $val -> max_length );
printf ( "Length: %d\n" , $val -> length );
printf ( "charsetnr: %d\n" , $val -> charsetnr );
printf ( "Flags: %d\n" , $val -> flags );
printf ( "Type: %d\n\n" , $val -> type );
}
$result -> free ();
}
}
$mysqli -> close ();
?>
Example #2 过程化风格
<?php
$link = mysqli_connect ( "127.0.0.1" , "my_user" , "my_password" , "sakila" );
if ( mysqli_connect_errno ()) {
printf ( "Connect failed: %s\n" , mysqli_connect_error ());
exit();
}
foreach (array( 'latin1' , 'utf8' ) as $charset ) {
// Set character set, to show its impact on some values (e.g., length in bytes)
mysqli_set_charset ( $link , $charset );
$query = "SELECT actor_id, last_name from actor ORDER BY actor_id" ;
echo "======================\n" ;
echo "Character Set: $charset \n" ;
echo "======================\n" ;
if ( $result = mysqli_query ( $link , $query )) {
$finfo = mysqli_fetch_fields ( $result );
foreach ( $finfo as $val ) {
printf ( "Name: %s\n" , $val -> name );
printf ( "Table: %s\n" , $val -> table );
printf ( "Max. Len: %d\n" , $val -> max_length );
printf ( "Length: %d\n" , $val -> length );
printf ( "charsetnr: %d\n" , $val -> charsetnr );
printf ( "Flags: %d\n" , $val -> flags );
printf ( "Type: %d\n\n" , $val -> type );
}
mysqli_free_result ( $result );
}
}
mysqli_close ( $link );
?>
以上例程会输出:
====================== Character Set: latin1 ====================== Name: actor_id Table: actor Max. Len: 3 Length: 5 charsetnr: 63 Flags: 49699 Type: 2Name: last_name Table: actor Max. Len: 12 Length: 45 charsetnr: 8 Flags: 20489 Type: 253====================== Character Set: utf8 ====================== Name: actor_id Table: actor Max. Len: 3 Length: 5 charsetnr: 63 Flags: 49699 Type: 2Name: last_name Table: actor Max. Len: 12 Length: 135 charsetnr: 33 Flags: 20489
[#1] cz dot paranoiq at gmail dot com [2015-02-21 09:39:06]
complete list of flags from MySQL source code:
NOT_NULL_FLAG 1
PRI_KEY_FLAG 2
UNIQUE_KEY_FLAG 4
MULTIPLE_KEY_FLAG 8
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
NO_DEFAULT_VALUE_FLAG 4096
ON_UPDATE_NOW_FLAG 8192
NUM_FLAG 32768
PART_KEY_FLAG 16384
GROUP_FLAG 32768
UNIQUE_FLAG 65536
BINCMP_FLAG 131072
GET_FIXED_FIELDS_FLAG (1 << 18)
FIELD_IN_PART_FUNC_FLAG (1 << 19)
[#2] andre at koethur dot de [2014-04-20 07:55: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);
}
?>
[#3] educarme at adinet dot com dot uy [2013-12-20 13:16:35]
Codigos de tipos de datos devueltos por fetch_fields()
Nombre Codigo
tinyint_ 1
boolean_ 1
smallint_ 2
int_ 3
float_ 4
double_ 5
real_ 5
timestamp_ 7
bigint_ 8
serial 8
mediumint_ 9
date_ 10
time_ 11
datetime_ 12
year_ 13
bit_ 16
decimal_ 246
text_ 252
tinytext_ 252
mediumtext_ 252
longtext_ 252
tinyblob_ 252
mediumblob_ 252
blob_ 252
longblob_ 252
varchar_ 253
varbinary_ 253
char_ 254
binary_ 254
[#4] AndrewRoz [2011-01-12 20:18:47]
The field info bit-flags used by MySql are:
(Thanks to ragtag at hotmail dot com)
<?php
// To test if a flag is set you can use & like so:
$meta = $mysqli_result_object->fetch_field();
if ($meta->flags & 4) {
echo 'Unique key flag is set';
}
?>