代码之家  ›  专栏  ›  技术社区  ›  Crazy Joe Malloy

PHP mysqli_fetch_字段数据类型

  •  7
  • Crazy Joe Malloy  · 技术社区  · 15 年前

    特别是 财产-来自 the documentation 这个字段似乎返回一个整数。。。

    伟大的

    我只是找不到一个能让我将数字转换为相应数据类型的表。我甚至不确定我是否在找 php mysql 具体信息。我可以自己画出来,但我更希望有人能给我指出实际的文档。

    4 回复  |  直到 15 年前
        1
  •  13
  •   Ben James    15 年前

    您可以将此数字与此处列出的各种预定义常量进行比较:

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

    例如 MYSQLI_TYPE_SHORT

        2
  •  8
  •   Bill Karwin    15 年前

    PHP函数 mysqli_fetch_field() 似乎直接映射到MySQL C API函数 mysql_fetch_field() ,它返回类型为的C结构 MYSQL_FIELD ,在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
    };
    
        3
  •  2
  •   NinjaKC    10 年前

    首先,我想说,我确实认识到,与公认的答案相比,这个答案有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_标志和mysqli_field_类型的函数,这些函数是完美的向后兼容函数。

    PHP5.5 mysql_字段_类型“向后兼容函数”,mysqli_字段_类型(注意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;
    }
    

    PHP5.5 mysql_字段_标志“向后兼容函数”,mysqli_字段_标志(注意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;
    }
    
        4
  •  0
  •   Kris    15 年前