我正在尝试从PHP中的MySql数据库表中检索位掩码。我使用meekro db库与数据库进行交互。
以下是用于查询数据库的代码:
$query = DB::queryFirstRow($select, $tid);
$dm = $query['dayMask'];
var_dump($dm);
数据库返回的行包含一个名为dayMask
的列,其定义为BIT(7)
,其值为0110001
。
以上代码打印string(3) "127"
这对我来说毫无意义。掩码的十进制表示为49
,127
对应1111111
。
我做错了什么?如何在PHP中从数据库中检索位掩码值?
答案 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会正确显示该字段,而使用正确的语法插入时,它会错误地显示该值。