文字

mysqli_result::fetch_fields

mysqli_fetch_fields

(PHP 5)

mysqli_result::fetch_fields -- mysqli_fetch_fieldsReturns an array of objects representing the fields in a result set

说明

面向对象风格

array mysqli_result::fetch_fields ( void )

过程化风格

array mysqli_fetch_fields ( mysqli_result $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.

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

参见

  • mysqli_num_fields() - Get the number of fields in a result
  • mysqli_fetch_field_direct() - Fetch meta-data for a single field
  • mysqli_fetch_field() - Returns the next field in the result set

用户评论:

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

上一篇: 下一篇: