2009-11-07 53 views
7

我需要一些幫助來跟蹤mysqli結果對象的fetch_field方法中有關信息的一些基本信息。PHP mysqli_fetch_field數據類型

具體的屬性 - 從the documentation它似乎是這一領域返回一個整數...

太好了!

我似乎無法找到一個表格,可以讓我將數字轉換爲相應的數據類型。我甚至不確定我是否在尋找phpmysql的具體信息。推擠來推我可以自己映射出來,但我寧願如果有人可以指向我的實際文檔。

我錯過了什麼?

回答

0

我認爲這隻會給你一些標誌;可以爲空或不等。

您可能最好查詢INFORMATION_SCHEMA.COLUMNS以獲得該類細節。

+1

'flags'是一個單獨的屬性。還有一個'type'屬性可以做他想做的事情。 – 2009-11-07 00:24:31

+0

它看起來像這兩個常量集(可能還有其他)在這個頁面上。 – 2009-11-07 01:36:46

7

PHP函數mysqli_fetch_field()似乎直接映射到MySQL C API函數mysql_fetch_field(),它返回MYSQL_FIELD類型的C結構,在的mysql.h定義。

結構的type字段是enum_field_types,其定義如下:

enum_field_types { 
    MYSQL_TYPE_DECIMAL, 
    MYSQL_TYPE_TINY, 
    MYSQL_TYPE_SHORT, 
    MYSQL_TYPE_LONG, 
    MYSQL_TYPE_FLOAT, 
    MYSQL_TYPE_DOUBLE, 
    MYSQL_TYPE_NULL, 
    MYSQL_TYPE_TIMESTAMP, 
    MYSQL_TYPE_LONGLONG, 
    MYSQL_TYPE_INT24, 
    MYSQL_TYPE_DATE, 
    MYSQL_TYPE_TIME, 
    MYSQL_TYPE_DATETIME, 
    MYSQL_TYPE_YEAR, 
    MYSQL_TYPE_NEWDATE, 
    MYSQL_TYPE_VARCHAR, 
    MYSQL_TYPE_BIT, 
    MYSQL_TYPE_NEWDECIMAL=246, 
    MYSQL_TYPE_ENUM=247, 
    MYSQL_TYPE_SET=248, 
    MYSQL_TYPE_TINY_BLOB=249, 
    MYSQL_TYPE_MEDIUM_BLOB=250, 
    MYSQL_TYPE_LONG_BLOB=251, 
    MYSQL_TYPE_BLOB=252, 
    MYSQL_TYPE_VAR_STRING=253, 
    MYSQL_TYPE_STRING=254, 
    MYSQL_TYPE_GEOMETRY=255 
}; 
1

首先,我想說我確實認識比較公認的答案在這個答案5年的差距。

雖然我覺得接受的答案確實指出人們朝着正確的方向發展,並且我發現許多其他答案指向這篇文章,但我並不認爲這是問題的堅實答案,或許多其他人喜歡它特別是那個說「這會讓我把數字翻譯成它的相應數據類型」的部分。

爲此,我着手回顧一些php函數已經爲我們處理過的函數,mysqli_field_flags($ result,$ field_offset)和mysqli_field_type($ result,$ field_offset),儘管mysqli_field_flags返回正確舊的mysql_field_flags會給我們什麼(大多數情況下,讓我知道是否有人發現一些與舊的不一樣的東西,我們可以在這裏更新它,以便所有人都可以訪問它)。第二個參數mysqli_field_type實際上只返回字段的類型數據,不像mysql_field_type,它也會返回同一個字符串中的標誌。

這些都可以從這裏抓住,讓我知道如果有任何問題。 (進一步說,我不能完全負責這個答案,因爲信譽去andre at koethur dot de評論我們需要在php.net網站上的大部分內容),我剛剛添加了這個直接位來獲得我們的數字,並調整了名稱以更好地適合事物的方案,並且因爲mysqli沒有php mysqli_field_flags和mysqli_field_type函數,所以這些函數成爲完美的向後兼容性函數。

如果這些幫助你請投UP SO OTHER獲得消息,如果op讀取此請變更ANSWER)

PHP 5.5 mysql_field_type 「向後兼容性功能」,mysqli_field_type(注意I)

/** 
* Returns a string that represents the mysql field type 
* 
* @param mysqli_resource $result The result resource that is being evaluated. This result comes from a call to mysql_query(). 
* @param integer $field_offset The numerical field offset. The field_offset starts at 0. If field_offset does not exist, an error of level E_WARNING is also issued. 
*/ 
function mysqli_field_type($result , $field_offset) { 
    static $types; 

    $type_id = mysqli_fetch_field_direct($result,$field_offset)->type; 

    if (!isset($types)) 
    { 
     $types = array(); 
     $constants = get_defined_constants(true); 
     foreach ($constants['mysqli'] as $c => $n) if (preg_match('/^MYSQLI_TYPE_(.*)/', $c, $m)) $types[$n] = $m[1]; 
    } 

    return array_key_exists($type_id, $types)? $types[$type_id] : NULL; 
} 

PHP 5.5 mysql_field_flags 「向後兼容性功能」,mysqli_field_flags(注意I)

/** 
* Returns a string that represents the mysql field flags 
* 
* @param mysqli_resource $result The result resource that is being evaluated. This result comes from a call to mysql_query(). 
* @param integer $field_offset The numerical field offset. The field_offset starts at 0. If field_offset does not exist, an error of level E_WARNING is also issued. 
*/ 
function mysqli_field_flags($result , $field_offset) { 
    static $flags; 

    // Get the field directly 
    $flags_num = mysqli_fetch_field_direct($result,$field_offset)->flags; 

    if (!isset($flags)) 
    { 
     $flags = array(); 
     $constants = get_defined_constants(true); 
     foreach ($constants['mysqli'] as $c => $n) if (preg_match('/MYSQLI_(.*)_FLAG$/', $c, $m)) if (!array_key_exists($n, $flags)) $flags[$n] = $m[1]; 
    } 

    $result = array(); 
    foreach ($flags as $n => $t) if ($flags_num & $n) $result[] = $t; 

    $return = implode(' ', $result); 
    $return = str_replace('PRI_KEY','PRIMARY_KEY',$return); 
    $return = strtolower($return); 

    return $return; 
} 
+0

儘管這正是我所尋找的,但返回的類型似乎與PHP 5中返回的'mysql_fetch_field(...) - > type'不兼容。我必須像這樣手動填充數組:'$ types [3] ='int'; $ types [10] ='date'; $ types [253] ='string'; $ types [254] ='string';' – Tarnschaf 2017-09-25 22:04:24