PHP mysqli_fetch_field数据类型

时间:2009-11-07 00:18:45

标签: php types mysqli

我需要一些帮助来跟踪mysqli结果对象的fetch_field方法中有关信息的一些细节信息。

具体来说,类型属性 - 来自the documentation,这个字段似乎会返回一个整数......

大!

我似乎无法找到一个表格,让我将数字转换为相应的数据类型。我甚至不确定我是否在寻找 php mysql 特定信息。推动我可以自己绘制出来,但我更愿意有人能指出我的实际文档。

我错过了什么?

4 个答案:

答案 0 :(得分:12)

您可以将此数字与各种预定义常量进行比较,这些常量列在此处:

http://www.php.net/manual/en/mysqli.constants.php

e.g。 MYSQLI_TYPE_SHORT

答案 1 :(得分:7)

PHP函数mysqli_fetch_field()似乎直接映射到MySQL C API函数mysql_fetch_field(),它返回一个在mysql.h中定义的类型为MYSQL_FIELD的C结构。

结构的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
};

答案 2 :(得分: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不同,后者也会返回相同字符串中的标志。

这两个都可以从这里抓取,让我知道是否有问题。 (此外,我不能对这个答案负全部责任,因为我在{php.com网站上对大部分需要的内容进行评论都要归功于andre at koethur dot de),我刚刚添加了这个直接位来获取我们的数字并且调整了名称以更好地适应事物的方案,并且因为mysqli已经没有php mysqli_field_flags和mysqli_field_type函数,所以这些函数可以作为完美的向后兼容函数。

如果这些有帮助你请投票,以便其他人得到消息,如果OP请阅读此请更改答案;)

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;
}

答案 3 :(得分:0)

我认为那只会给你一些旗帜;可空或不可以等。

您最好查询INFORMATION_SCHEMA.COLUMNS以获取此类详细信息。