mysqli中的位标志使用fetch_field_direct是什么意思

5 php sql database mysqli

使用mysqli,我可以获得类似这样的字段的信息

$field = mysqli_fetch_field_direct($result, $fieldCount);
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法从结果中获取字段标志

$field->flags
Run Code Online (Sandbox Code Playgroud)

PHP手册说,这将返回“一个表示该字段的位标志的整数”。但这就是我能找到的所有信息。如何解释位标志?到目前为止,我已经解决了

整数(字段长度无关紧要)根据指定的属性返回以下位标志:

primary key 49967
primary & unique 53255
unique key 53251
foreign key 53257
unique & index 53259 (Auto increment 49675)
Run Code Online (Sandbox Code Playgroud)

谢谢你尽你所能的帮助!

Mch*_*chl 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
Run Code Online (Sandbox Code Playgroud)

请注意,上面发布的每个数字都是 2 的幂。(1 = 2^0、2 = 2^1、4 = 2^2 等等)。换句话说,它们中的每一个都对应于数字中的一位。要了解其49967含义,您可以例如以二进制形式显示它

>> decbin(49967);
'1100001100101111'
Run Code Online (Sandbox Code Playgroud)

从右侧开始,您现在可以看到该字段具有以下标志

NOT_NULL 
PRI_KEY  
UNIQUE_KEY
MULTIPLE_KEY
UNSIGNED
ENUM
AUTO_INCREMENT
GROUP
UNIQUE
Run Code Online (Sandbox Code Playgroud)

检查特定标志的其他方法是使用二元合取运算符和 mysqli 常量,如nickb&在下面的注释中提供的:

>> 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
Run Code Online (Sandbox Code Playgroud)

基本上,对于已设置的标志,您会获得非零值;对于未设置的标志,您会获得 0 值。您可以在以下情况下安全地使用它:

if($fieldFlags & MYSQLI_PRI_KEY_FLAG) {
  echo 'this field is a primary key';
}
Run Code Online (Sandbox Code Playgroud)