0

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

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 转换为数组并将字符串转换为浮点数,例如,

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

3 回答 3

1

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

于 2012-06-04T01:02:50.587 回答
1

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

你可以先输入 cast $product->code:

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

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

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

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

于 2012-06-04T01:14:45.987 回答
1

值超出范围。

PHP 人:

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

如果 PHP 遇到超出整数类型范围的数字,它将被解释为浮点数。此外,导致数字超出整数类型范围的操作将改为返回浮点数。

于 2012-06-04T01:19:43.777 回答