我正在尝试从MySql DB表中检索位掩码。我使用meekro db库与数据库进行交互。
以下是用于查询数据库的代码:
$query = DB::queryFirstRow($select, $tid);
$dm = $query['dayMask'];
var_dump($dm);数据库返回的行包含一个名为dayMask的列,该列被定义为BIT(7),其值为0110001。
上面的代码打印string(3) "127",这对我来说没有任何意义。掩码的十进制表示是49,127对应于1111111。
我做错了什么?如何在PHP中从DB中检索位掩码值?
发布于 2012-08-28 22:00:17
解决了。
该问题与用于插入新值的SQL语句有关。
正如我所发现的,从VolkerK提供的示例开始,为了在MySQL中插入位值,我应该使用以下语法(来自here):
mysql> INSERT INTO t SET b = b'1010';使用此语法,我的代码可以正常工作。
奇怪的是,将值作为文字插入并不会导致来自MySQL的任何错误或警告。此外,phpmyadmin在使用错误的语法插入时会正确显示字段,而在使用正确的语法插入时会错误地显示值。
发布于 2012-08-28 17:28:41
尝试使用bindec()
$dm = bindec($query['dayMask']);发布于 2012-08-28 17:38:03
我不能用重现这种行为
<?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"
https://stackoverflow.com/questions/12156305
复制相似问题