【问题标题】:What do bit flags in mysqli mean using fetch_field_directmysqli中的位标志使用fetch_field_direct是什么意思
【发布时间】:2012-07-11 16:57:06
【问题描述】:

使用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)

感谢您提供的任何帮助!

【问题讨论】:

    标签: php sql database mysqli


    【解决方案1】:

    查看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
    

    检查特定标志的其他方法是使用二元连词运算符&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';
    }
    

    【讨论】:

    • 我先做研究并阅读手册。提供的数字与我得到的数字不符。标志是否相加,以便 num_flag (32768) + pri_key_flag (2) 得到 32770?无论如何,为什么作为主键的整数得到 49967 的值?
    • @user1517599:我扩展了答案,向您展示如何使用这些数据
    • 太棒了。这似乎是缺失的环节。非常感谢!
    • 您好。答案中提供的有关将十进制标志转换为二进制数的信息非常有帮助,但上面的代码不完整。请看stackoverflow.com/questions/15322548/…
    猜你喜欢
    • 2014-06-04
    • 2014-02-27
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多