文字

mysqli_result::fetch_field

mysqli_fetch_field

(PHP 5)

mysqli_result::fetch_field -- mysqli_fetch_fieldReturns the next field in the result set

说明

面向对象风格

object mysqli_result::fetch_field ( void )

过程化风格

object mysqli_fetch_field ( mysqli_result $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.

Object properties
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

参见

  • mysqli_num_fields() - Get the number of fields in a result
  • mysqli_fetch_field_direct() - Fetch meta-data for a single field
  • mysqli_fetch_fields() - Returns an array of objects representing the fields in a result set
  • mysqli_field_seek() - Set result pointer to a specified field offset

用户评论:

[#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'

?>

上一篇: 下一篇: