【问题标题】:decbin works when I put the number in directly, but not when I pull it from a db当我直接输入数字时,decbin 有效,但当我从数据库中提取数字时无效
【发布时间】:2019-07-17 19:39:55
【问题描述】:

我使用以十进制存储数据的数据库。我将其转换为二进制,因此我可以将其读取为打开和关闭。在十进制长度超过 6 个字符之前,我没有任何问题。

以下作品:

$value = 2147614720;
$value = decbin($value);

输出:10000000000000100000000000000000

但是,如果我尝试从数据库中提取该值,如果超过 6 个字符,它将不起作用。

$value = $row['decimalvalue'];
$value = decbin($value);

输出:1111111111111111111111111111111

任何帮助都会很棒。谢谢。

【问题讨论】:

  • 你得到最大整数二进制值 echo decbin(2147483647); 检查这个stackoverflow.com/questions/10255724/…。如果你有非常大的整数,你可以使用BIGINT
  • 首先,感谢您的快速回复。我不确定该消息来源是否帮助我获得了我正在寻找的答案。例如,如果我将字段类型更改为 varchar(20),它不会改变任何东西;同样的结果。如果我自己打印出 $row['decimalvalue'],它会显示正确的值 2147614720。当我尝试从表中提取数据然后将其放入 decbin() 时,它只会给我这个问题。如果我分别做任何一方,它的工作原理。
  • 确定吗?看到这个rextester.com/PBMBJY55859 如果值是正确的然后decbin 给出正确的二进制值1111111111111111111111111111111 是十进制的二进制值2147483647 这意味着你已经将2147483647 传递给decbin

标签: php mysql binary decimal


【解决方案1】:

直到最近,PHP 还是仅使用 32 位整数构建的。这可以解释为什么第二个失败了。但令人费解的是为什么第一个示例有效。

2147614720 > 2^31-1,所以变成了2^31-1 = 2147483647。

升级你的 PHP。

【讨论】:

    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多