Используя 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
, вы можете, например, отобразить его в двоичной форме
>> decbin(49967); '1100001100101111'
Начиная с правой стороны, вы можете теперь прочитать, что поле имеет следующие флаги
NOT_NULL PRI_KEY UNIQUE_KEY MULTIPLE_KEY UNSIGNED ENUM AUTO_INCREMENT GROUP UNIQUE
Другой способ проверки, для конкретного флага – использовать бинарный оператор соединения и константы 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
В основном вы gat ненулевое значение для установленных флагов, а 0 для флагов, которые не установлены. Вы можете безопасно использовать его в таких условиях:
if($fieldFlags & MYSQLI_PRI_KEY_FLAG) { echo 'this field is a primary key'; }