The constants for the TYPE number returned by fetch_field are enumerated here (MYSQLI_TYPE_*):
http://php.net/manual/en/mysqli.constants.php
mysqli_result::fetch_field
mysqli_fetch_field
(PHP 5)
mysqli_result::fetch_field -- mysqli_fetch_field — 結果セットの次のフィールドを返す
説明
オブジェクト指向型
object mysqli_result::fetch_field
( void
)
手続き型
結果セットから ひとつのカラムの情報をオブジェクトとして返します。この関数を 繰り返しコールすることで、結果セットのすべてのカラムについての情報が 取得可能です。
返り値
フィールド定義情報を含むオブジェクトを返します。もし
フィールドの情報が取得できない場合は、FALSE を返します。
| プロパティ | 説明 |
|---|---|
| name | カラムの名前。 |
| orgname | もしエイリアスが指定されている場合の、本来の名前。 |
| table | フィールドが属するテーブルの名前。 |
| orgtable | もしエイリアスが指定されている場合の、本来のテーブル名。 |
| def | デフォルト値のために予約済。現在は常に ""。 |
| db | データベース (PHP 5.3.6 以降)。 |
| catalog | カタログ名。常に "def" (PHP 5.3.6 以降)。 |
| 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 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();
?>
例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: 254 Name: SurfaceArea Table: Country max. Len: 10 Flags: 32769 Type: 4
参考
- mysqli_num_fields() - 結果のフィールド数を取得する
- mysqli_fetch_field_direct() - 単一のフィールドのメタデータを取得する
- mysqli_fetch_fields() - 結果セットのフィールド情報をオブジェクトの配列で返す
- mysqli_field_seek() - 結果ポインタを、指定したフィールドオフセットに設定する
Anonymous
16-Feb-2012 08:20
iansoko at hotmail dot com
06-Oct-2011 08:24
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
ragtag at hotmail dot com
17-Sep-2008 05:16
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';
}
?>
