我需要一些幫助來跟蹤mysqli結果對象的fetch_field方法中有關信息的一些基本信息。PHP mysqli_fetch_field數據類型
具體的型屬性 - 從the documentation它似乎是這一領域返回一個整數...
太好了!
我似乎無法找到一個表格,可以讓我將數字轉換爲相應的數據類型。我甚至不確定我是否在尋找php或mysql的具體信息。推擠來推我可以自己映射出來,但我寧願如果有人可以指向我的實際文檔。
我錯過了什麼?
我需要一些幫助來跟蹤mysqli結果對象的fetch_field方法中有關信息的一些基本信息。PHP mysqli_fetch_field數據類型
具體的型屬性 - 從the documentation它似乎是這一領域返回一個整數...
太好了!
我似乎無法找到一個表格,可以讓我將數字轉換爲相應的數據類型。我甚至不確定我是否在尋找php或mysql的具體信息。推擠來推我可以自己映射出來,但我寧願如果有人可以指向我的實際文檔。
我錯過了什麼?
我認爲這隻會給你一些標誌;可以爲空或不等。
您可能最好查詢INFORMATION_SCHEMA.COLUMNS以獲得該類細節。
'flags'是一個單獨的屬性。還有一個'type'屬性可以做他想做的事情。 – 2009-11-07 00:24:31
它看起來像這兩個常量集(可能還有其他)在這個頁面上。 – 2009-11-07 01:36:46
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
};
首先,我想說我確實認識比較公認的答案在這個答案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;
}
儘管這正是我所尋找的,但返回的類型似乎與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
美麗 - 謝謝你,先生! – 2009-11-07 01:31:07