2016-01-25 93 views
4

我正在嘗試將模塊從mysql轉換爲mysqli。在一個點上的模塊使用的功能:將mysql_field_flags轉換爲mysqli

mysql_field_flags($fields,$n) 

這將返回象標誌的字符串:「NOT_NULL」,「primary_key」,「unique_key」等。

什麼是返回的mysqli功能一樣?因爲

mysqli_fetch_field_direct($fields,$n)->flags 

只返回一個整數而不是字段名稱。

回答

2

確實,它確實返回一個整數,這是一個位掩碼的標誌。你會與predefined constants(那些名爲*_FLAG)使用此:

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

感謝您的快速答覆!但是,由於某種原因,我得到的整數結果從 mysqli_fetch_field_direct($ fields,$ n) - >標誌 似乎不符合預定義的常量。我得到的整數是0,32768或9377.這些似乎不是正確的整數? –

+0

這是一個*位掩碼*,您需要*按位*與常數進行比較,如圖所示。單個整數一次對應*幾個標誌*,並且需要'&'-compared來查看它是否包含一個特定的標誌。 – deceze

+0

這是最好的解決方案,你必須知道32768的常量值,這是NUM_FLAG ...它只是一個例子..你可以創建一個自定義數組或其他任何東西一次.. @BasVerhaar – devpro

0

我已經創建了一個自定義的功能,我希望這會幫助你。

/** 
* 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