使用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)
谢谢你的尽心帮助!
参见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,依此类推)。换句话说,它们中的每一个对应于一个数字中的一位。要了解49967含义,可以例如以二进制形式显示
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'; }