PHP从数据库返回浮点数而不是字符串?

时间:2012-06-04 00:59:37

标签: php mysql floating-point base-conversion unique-id

我使用它为我商店中的每个产品创建一个唯一的代码,

echo base_convert(uniqid(),16,10);

例如,

1403802682572650

我的查询很简单,

        $sql = "
            SELECT * 
            FROM page AS p

            LEFT JOIN stock AS o
            ON o.id = p.page_id

            WHERE p.type = ?
            AND p.hide != ?
            ORDER BY p.backdated_on
        ";

当我想获得产品代码时,我会这样做,

var_dump($product->code);

但PHP返回float(1.4038026825726E+15)而不是1403802682572650

为什么PHP返回float而不是string?我怎样才能得到这个号码?

或者我应该在从db表请求结果之前将数字转换/转换为我的SQL查询中的字符串或varchar?

修改 在我的代码中找到了错误。

我有一行将json转换为数组并将字符串转换为float,例如

echo json_decode("1403802682572650", true); // 1.4038026825726E+15

3 个答案:

答案 0 :(得分:1)

没有。您应该将列本身更改为VARCHAR,因为它不是真正用作数字。

答案 1 :(得分:1)

您可以执行以下两项操作之一,而不会对数据库架构进行可能的有害更改。

您可以先输入演员$ product->代码:

var_dump( (string) $product->code );

或者您可以在查询中转换/转换选择:

SELECT CAST(columnName as char) as code ...

如果数据库引擎不支持您的查询,我一直都喜欢通过代码而不是查询来处理大多数此类更改。

答案 2 :(得分:1)

该值超出范围。

PHP Man:

整数的大小取决于平台,尽管最大值约为20亿是通常的值(32位有符号)。 64位平台的最大值通常约为9E18。 PHP不支持无符号整数。整数大小可以使用常量PHP_INT_SIZE来确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX来确定。

如果PHP遇到超出整数类型边界的数字,则会将其解释为float。此外,导致超出整数类型边界的数字的操作将返回浮点数。