downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

mysqli_result::fetch_field> <mysqli_result::fetch_assoc
[edit] Last updated: Fri, 25 May 2012

view this page in

mysqli_result::fetch_field_direct

mysqli_fetch_field_direct

(PHP 5)

mysqli_result::fetch_field_direct -- mysqli_fetch_field_direct単一のフィールドのメタデータを取得する

説明

オブジェクト指向型

object mysqli_result::fetch_field_direct ( int $fieldnr )

手続き型

object mysqli_fetch_field_direct ( mysqli_result $result , int $fieldnr )

指定した結果セットから、フィールド定義情報を含むオブジェクトを返します。

パラメータ

result

手続き型のみ: mysqli_query()mysqli_store_result() あるいは mysqli_use_result() が返す結果セット ID。

fieldnr

フィールド番号。この値は 0 から フィールド数 - 1 までの範囲でなければなりません。

返り値

フィールド定義情報を含むオブジェクトを返します。もし、指定した fieldnr のフィールドの情報が取得できない場合は FALSE を返します。

オブジェクトの属性
属性 説明
name カラムの名前。
orgname もしエイリアスが指定されている場合の、本来の名前。
table フィールドが属するテーブルの名前。
orgtable もしエイリアスが指定されている場合の、本来のテーブル名。
def フィールドのデフォルト値。文字列形式。
max_length 結果セットにおけるフィールドの最大幅。
length テーブルの定義で指定されているフィールド幅。
charsetnr フィールドの文字セット番号。
flags フィールドのビットフラグを整数型で表す。
type フィールドのデータ型。
decimals フィールドの桁数(integer 型のフィールド)。

例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 Name LIMIT 5";

if (
$result $mysqli->query($query)) {

    
/* カラム 'SurfaceArea' のフィールド情報を取得します */
    
$finfo $result->fetch_field_direct(1);

    
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"$finfo->type);

    
$result->close();
}

/* 接続を閉じます */
$mysqli->close();
?>

例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 Name LIMIT 5";

if (
$result mysqli_query($link$query)) {

    
/* カラム 'SurfaceArea' のフィールド情報を取得します */
    
$finfo mysqli_fetch_field_direct($result1);

    
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"$finfo->type);

    
mysqli_free_result($result);
}

/* 接続を閉じます */
mysqli_close($link);
?>

上の例の出力は以下となります。

Name:     SurfaceArea
Table:    Country
max. Len: 10
Flags:    32769
Type:     4

参考



mysqli_result::fetch_field> <mysqli_result::fetch_assoc
[edit] Last updated: Fri, 25 May 2012
 
add a note add a note User Contributed Notes mysqli_result::fetch_field_direct
bl at example dot com 09-Aug-2010 10:11
note that
"SELECT <timestamp-field>, ..."
will return the field with type 7 (timestamp) but with content like "2010-07-14 14:35:08". the point being it is a string.

"SELECT <timestamp-field> + 0, ..."
returns a type 5 (double) but while a number, is not seconds since epoch, but a number in MySQL's "YYYYMMDDHHMMSS" format, in this example:
20100714143508

(PHP 5.2.12)
shoresofnowhere at gmail dot com 26-Aug-2009 03:50
Beware of the fact that the ->def property NEVER gets filled with the correct default field value, so it's totally USELESS.

This happens NOT for a bug in php (so don't go filling in a bug report), but happens BY DESIGN, since the MySQL C API call doesn't fill in this value, unless you call the mysql_list_fields() function, which Php doesn't.

See here for reference.
http://dev.mysql.com/doc/refman/5.0/en/c-api-datatypes.html

Also, be aware that if you're using a query which contains subqueries, the primary key/autoincrement flags do NOT get passed along, even if the field you're looking at is the primary autoincrement key of the master table:

SELECT * from (SELECT id from areas) AS subareas

and you'll find primary key and autoinc flags off on id field, even if id was the primary autoinc key of areas table.

This also is by design, i think, since it's supposed that if we're using a subquery then the primary key/autoinc stuff might have no sense at all, since in the result set we can compose fileds from many different tables.

Hoping this is useful, bye!
gcdreak at example dot com 18-Aug-2009 03:28
I wrote a simple class to get info about fields.
Try it!

<?php
           
class MysqlFieldsInfo implements Iterator
           
{
               
                private
$result;
                private
$position;
                private
$row;
               
               
                function
__construct($result){
                   
$this->result = $result;
                   
$this->position = 0;
                   
$this->rewind();    // W $results wewnętrzny wskaźnik może być przesunięty więc powracamy do początku
               
}
               
                public function
current(){
                    return
$this->row;
                }
               
                public function
next(){
                   
$this->position++;
                   
$this->row = $this->result->fetch_field();   
                }
               
                public function
valid(){
                    return (boolean)
$this->row;
                }
               
                public function
key(){
                    return
$this->position;
                }
               
                public function
rewind(){
                   
$this->position = 0;
                   
$this->result->field_seek(0);
                   
$this->next();
                }
               
               
//    This function show data in table
               
public function export(){
                   
                    echo
'<table id="db_table_info">';
                    echo
'<tr>
                                                <th>Name</th>
                                                <th>Orgname</th>
                                                <th>Table</th>
                                                <th>Orgtable</th>
                                                <th>Def</th>
                                                 <th>Max_length</th>
                                                 <th>Length</th>
                                                 <th>Charsetnr</th>
                                                 <th>Flags</th>
                                                 <th>Type</th>
                                                  <th>Decimals</th>
                                          </tr>'
;
                    while(
$this->valid()){
                        echo
'<tr>';
                       
printf("\n\t<td>%s</td>\n", $this->current()->name);
                       
printf("\t<td>%s</td>\n", $this->current()->orgname);
                       
printf("\t<td>%s</td>\n", $this->current()->orgtable);
                       
printf("\t<td>%s</td>\n", $this->current()->def);
                       
printf("\t<td>%s</td>\n", $this->current()->max_length);
                       
printf("\t<td>%s</td>\n", $this->current()->length);
                       
printf("\t<td>%s</td>\n", $this->current()->charsetnr);
                       
printf("\t<td>%s</td>\n", $this->current()->flags);
                       
printf("\t<td>%s</td>\n", $this->current()->type);
                       
printf("\t<td>%s</td>\n", $this->current()->decimals);

                        echo
'</tr>';       
           
                       
$this->next();
                    }
                   
                    echo
'</table>';
                }
            }
?>
daniel at summit cove dot com 22-Feb-2009 03:36
Here's a bigger list of data types.  I got this by creating every type I could and calling fetch_fields():

<?php
$mysql_data_type_hash
= array(
   
1=>'tinyint',
   
2=>'smallint',
   
3=>'int',
   
4=>'float',
   
5=>'double',
   
7=>'timestamp',
   
8=>'bigint',
   
9=>'mediumint',
   
10=>'date',
   
11=>'time',
   
12=>'datetime',
   
13=>'year',
   
16=>'bit',
   
//252 is currently mapped to all text and blob types (MySQL 5.0.51a)
   
253=>'varchar',
   
254=>'char',
   
246=>'decimal'
);
?>
cjs at ashdowntech dot com 16-Sep-2008 09:52
According to
http://www.redferni.uklinux.net/mysql/MySQL-Protocol.html

Data type values are:

DECIMAL           0       ENUM           247
TINY              1       SET            248
SHORT             2       TINY_BLOB      249
LONG              3       MEDIUM_BLOB    250
FLOAT             4       LONG_BLOB      251
DOUBLE            5       BLOB           252
NULL              6       VAR_STRING     253
TIMESTAMP         7       STRING         254
LONGLONG          8       GEOMETRY       255
INT24             9
DATE             10
TIME             11
DATETIME         12
YEAR             13
NEWDATE          14

Note that this is not tested and does not contain
all the values noted by deluxmozart
cjs at ashdowntech dot com 12-Sep-2008 08:00
According to
dev.mysql.com/sources/doxygen/mysql-5.1/mysql__com_8h-source.html
the flag bits are:
 
 NOT_NULL_FLAG          1         /* Field can't be NULL */
 PRI_KEY_FLAG           2         /* Field is part of a primary key */
 UNIQUE_KEY_FLAG        4         /* Field is part of a unique key */
 MULTIPLE_KEY_FLAG      8         /* Field is part of a key */
 BLOB_FLAG             16         /* Field is a blob */
 UNSIGNED_FLAG         32         /* Field is unsigned */
 ZEROFILL_FLAG         64         /* Field is zerofill */
 BINARY_FLAG          128         /* Field is binary   */
 ENUM_FLAG            256         /* field is an enum */
 AUTO_INCREMENT_FLAG  512         /* field is a autoincrement field */
 TIMESTAMP_FLAG      1024         /* Field is a timestamp */
deluxmozart at yahoo dot de 24-Jul-2008 11:05
Here are some Numbers of Datatypes. I searched for it but i didn't find a list, where the datatypes of the numbers are listed.

so first I can give this:

    3    -    Int
    10    -    Date
    246    -    Decimal
    252    -     text
    253    -    VarChar
    254    -    Boolean

 
show source | credits | sitemap | contact | advertising | mirror sites