Что означают битовые флаги в mysqli, используя fetch_field_direct

Используя 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'; }