PHP检索位掩码值

时间:2012-08-28 09:23:10

标签: php mysql

我正在尝试从PHP中的MySql数据库表中检索位掩码。我使用meekro db库与数据库进行交互。

以下是用于查询数据库的代码:

$query = DB::queryFirstRow($select, $tid);

$dm = $query['dayMask'];
var_dump($dm);

数据库返回的行包含一个名为dayMask的列,其定义为BIT(7),其值为0110001

以上代码打印string(3) "127"这对我来说毫无意义。掩码的十进制表示为49127对应1111111

我做错了什么?如何在PHP中从数据库中检索位掩码值?

3 个答案:

答案 0 :(得分:1)

尝试使用bindec()

$dm = bindec($query['dayMask']);

答案 1 :(得分:1)

我无法使用

重现该行为
<?php
require 'meekrodb.2.0.class.php';
setup();
$select = 'SELECT * FROM tmpSO WHERE id=%s'; $tid = 1;
$query = DB::queryFirstRow($select, $tid);

$dm = $query['dayMask'];
var_dump($dm);



function setup() {
    DB::$user = 'localonly';
    DB::$password = 'localonly';
    DB::$dbName = 'test';
    DB::$host = 'localhost';
    DB::$port = '3306';
    DB::$encoding = 'utf8';
    DB::query('
        CREATE TEMPORARY TABLE tmpSO (
            id int auto_increment,
            dayMask BIT(7),
            primary key(id)
        )
    ');
    DB::query("INSERT INTO tmpSO SET dayMask = b'0110001'");
}

打印string(2) "49"

答案 2 :(得分:1)

解决。

问题与用于插入新值的SQL语句有关。

正如我发现,从VolkerK提供的示例开始,要在MySQL中插入位值,我应该使用以下语法(来自here):

mysql> INSERT INTO t SET b = b'1010';

使用此语法,我的代码可以正常工作。

奇怪的是,将值作为文字插入并不会导致MySQL出现任何错误或警告。此外,当使用错误的语法插入时,phpmyadmin会正确显示该字段,而使用正确的语法插入时,它会错误地显示该值。