0

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

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

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

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

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

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

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

4

3 回答 3

1

尝试使用bindec()

$dm = bindec($query['dayMask']);
于 2012-08-28T09:28:40.703 回答
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"

于 2012-08-28T09:38:03.053 回答
1

解决了。

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

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

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

使用这种语法我的代码可以工作。

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

于 2012-08-28T14:00:17.493 回答