PHP,从MySQL数据库读取8字节整数?

时间:2014-06-09 08:05:11

标签: php mysql

我在MySQL中有一个BINARY(40)列,在那里我存储了5个8字节的整数。我试图逐个在​​PHP中读取这些数字:

$result = mysqli_query($con,"SELECT data FROM list WHERE id=".$id);
$mysql_array = mysqli_fetch_array($result);
$list = str_split($mysql_array["data"], 8);
for($i = 0; $i < 5; $i++)
    echo $list[$i]."<br/>";

而不是我期望的数字,打印出奇怪的符号。如何将这些数字从二进制字符串转换为整数?

2 个答案:

答案 0 :(得分:2)

按如下方式更改您的查询:

$result = mysqli_query($con,"SELECT cast(data as char(40)) FROM list WHERE id=".$id);

答案 1 :(得分:1)

好的,由于您存储号码的方式,此代码仅在您获得64位支持时才有效,否则您必须查看bc替换,不应该&# 39;太难了:

for($i = 0; $i < 5; $i++) {
    $bin_str = $list[$i];
    $int_val = 0;
    for ($j = 0; $j < 8; ++$j) {
        $byte_val = ord(substr($bin_str, $j, 1));
        // push the next byte onto our integer:
        $int_val = ($int_val << 8) + $byte_val;
    }
    echo $int_val;
}
编辑:在所有可能的情况下,这是一个BC等值,但我现在无法测试它,但逻辑保持不变。

for($i = 0; $i < 5; $i++) {
    $bin_str = $list[$i];
    $bc_val = '0';
    for ($j = 0; $j < 8; ++$j) {
        $byte_val = ord(substr($bin_str, $j, 1));
        // push the next byte onto our integer:
        $bc_val = bcadd(bcmul($bc_val, 256, 0), "$byte_val", 0);
    }
    echo $bc_val;
}