5

mysqli を使用すると、次のようなフィールドに関する情報を取得できます

$field = mysqli_fetch_field_direct($result, $fieldCount);

を使用して、結果からフィールドフラグを取得できます

$field->flags

PHP マニュアルによると、これは「フィールドのビットフラグを表す整数」を返します。しかし、それは私が見つけることができるすべての情報です。ビットフラグはどのように解釈できますか? これまでのところ、私はそれを解決しました

整数 (フィールドの長さは関係ありません) は、指定された属性に応じて次のビット フラグを返します。

primary key 49967
primary & unique 53255
unique key 53251
foreign key 53257
unique & index 53259 (Auto increment 49675)

ご協力いただきありがとうございます。

4

1 に答える 1

4

http://www.php.net/manual/en/mysqli-result.fetch-fields.php#101828のコメントを参照してください。

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
PART_KEY_FLAG = 16384
GROUP_FLAG = 32768
NUM_FLAG = 32768
UNIQUE_FLAG = 65536

上記の数値はすべて 2 の累乗であることに注意してください (1 = 2^0、2 = 2^1、4 = 2^2 など)。つまり、それぞれが数値の 1 ビットに対応します。意味を読み取るに49967は、たとえば、バイナリ形式で表示できます

>> decbin(49967);
'1100001100101111'

右から、フィールドには次のフラグがあることがわかります

NOT_NULL 
PRI_KEY  
UNIQUE_KEY
MULTIPLE_KEY
UNSIGNED
ENUM
AUTO_INCREMENT
GROUP
UNIQUE

特定のフラグを確認する他の方法は、以下のコメントでnickb&によって提供される二項論理積演算子と mysqli 定数を使用することです。

>> echo MYSQLI_NOT_NULL_FLAG & 49967
1
>> echo MYSQLI_PRI_KEY_FLAG & 49967
2
>> echo MYSQLI_UNIQUE_KEY_FLAG & 49967
4
>> echo MYSQLI_MULTIPLE_KEY_FLAG & 49967
8
>> echo MYSQLI_BLOB_FLAG & 49967
0

基本的に、設定されているフラグにはゼロ以外の値を、設定されていないフラグには 0 を指定します。次のような状況でも安全に使用できます。

if($fieldFlags & MYSQLI_PRI_KEY_FLAG) {
  echo 'this field is a primary key';
}
于 2012-07-11T17:04:33.210 に答える