我使用它为我商店中的每个产品创建一个唯一的代码,
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
答案 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。此外,导致超出整数类型边界的数字的操作将返回浮点数。