【问题标题】:Convert mysql_field_flags to mysqli将 mysql_field_flags 转换为 mysqli
【发布时间】:2016-05-01 13:39:46
【问题描述】:

我正在尝试将模块从 mysql 转换为 mysqli。在某一时刻,模块使用了该功能:

mysql_field_flags($fields,$n)

这会返回一串标志,例如:“not_null”、“primary_key”、“unique_key”等。

返回相同的mysqli函数是什么?因为

mysqli_fetch_field_direct($fields,$n)->flags

只返回一个整数,而不是字段名。

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    确实,它确实返回一个整数,它是一个位掩码的标志。您可以将其与predefined constants(那些名为*_FLAG)一起使用:

    $flags = mysqli_fetch_field_direct($fields, $n)->flags;
    if ($flags & MYSQLI_NOT_NULL_FLAG) {
        echo 'Field has NOT NULL';
    }
    

    【讨论】:

    • 感谢您的快速回答!但是,由于某种原因,我从 mysqli_fetch_field_direct($fields,$n)->flags 获得的整数结果似乎与预定义的常量不对应。例如,我得到的整数是 0、32768 或 9377。这些似乎不是正确的整数?
    • 这是一个 位掩码,您需要将其按位与常量进行比较,如图所示。单个整数对应多个标志一次,需要&-比较以查看它是否包含一个特定标志。
    • 这是最好的解决方案,您必须知道 32768 的常量值,即 NUM_FLAG...这只是一个示例..您可以一次创建自定义数组或其他任何东西..@巴斯维尔哈尔
    【解决方案2】:

    我创建了一个自定义函数,希望对你有所帮助。

    /**
    * Get column data type in mysqli
    **/
    
    function getColumnDataType($info){
    
        // default data types
        $mysql_data_type_hash = array(
        1=>'tinyint',
        2=>'smallint',
        3=>'int',
        4=>'float',
        5=>'double',
        7=>'timestamp',
        8=>'bigint',
        9=>'mediumint',
        10=>'date',
        11=>'time',
        12=>'datetime',
        13=>'year',
        16=>'bit',
        //252 is currently mapped to all text and blob types (MySQL 5.0.51a)
        253=>'varchar',
        254=>'char',
        246=>'decimal'
        );
    
    
        foreach ($mysql_data_type_hash as $key => $value) {
            if($key == $info->type){
                echo $value;
            }
        }
    
        if ($info->flags & MYSQLI_AUTO_INCREMENT_FLAG) {
            echo ' AUTO_INCREMENT';
        }
    
        if ($info->flags & MYSQLI_NOT_NULL_FLAG) {
            echo ' NOT NULL';
        }
    
        if ($info->flags & MYSQLI_NUM_FLAG) {
            echo ' NUMERIC';
        }
    
        if ($info->flags & MYSQLI_UNIQUE_KEY_FLAG) {
            echo ' UNIQUE INDEX';
        }
    }
    

    如何使用它?

    假设您的查询是:

    $result = mysqli_query($link, "SELECT * FROM mytable");
    $finfo = mysqli_fetch_field_direct($result, 0); // checking field 1
    
    // call the function 
    $type = getColumnDataType($finfo); 
    echo $type; // int AUTO_INCREMENT NOT NULL NUMERIC 
    

    请注意,我的 ist 字段是自动递增的,所以我在结果中得到了这个:

    int AUTO_INCREMENT NOT NULL NUMERIC 
    

    旁注:

    对于其他标志,您可以点击以下链接:

    MYSQLI CONSTANTS

    Other Stack Answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 2012-02-26
      • 2021-01-03
      • 2014-07-02
      相关资源
      最近更新 更多