我正在嘗試將模塊從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
只返回一個整數而不是字段名稱。
我正在嘗試將模塊從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
只返回一個整數而不是字段名稱。
確實,它確實返回一個整數,這是一個位掩碼的標誌。你會與predefined constants(那些名爲*_FLAG
)使用此:
$flags = mysqli_fetch_field_direct($fields, $n)->flags;
if ($flags & MYSQLI_NOT_NULL_FLAG) {
echo 'Field has NOT NULL';
}
我已經創建了一個自定義的功能,我希望這會幫助你。
/**
* 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_fetch_field_direct($ fields,$ n) - >標誌 似乎不符合預定義的常量。我得到的整數是0,32768或9377.這些似乎不是正確的整數? –
這是一個*位掩碼*,您需要*按位*與常數進行比較,如圖所示。單個整數一次對應*幾個標誌*,並且需要'&'-compared來查看它是否包含一個特定的標誌。 – deceze
這是最好的解決方案,你必須知道32768的常量值,這是NUM_FLAG ...它只是一個例子..你可以創建一個自定義數組或其他任何東西一次.. @BasVerhaar – devpro