2012-08-28 45 views
0

我試圖從PHP中的MySql數據庫表檢索位掩碼。我使用meekro db庫與數據庫進行交互。PHP檢索位掩碼值

下面是用於查詢DB的代碼:

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

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

由數據庫返回的行中包含一個名爲dayMask柱,其與值0110001定義爲BIT(7)

上面的代碼打印string(3) "127"這對我沒有任何意義。掩碼的十進制表示是49,127對應於1111111

我在做什麼錯?我如何從PHP中的數據庫檢索位掩碼值?

+0

PHP沒有位掩碼值類型。可能首先應該研究數據庫究竟返回的是什麼(例如,通過使用命令行客戶端或工作臺gui),然後跳到結論。 – hakre

回答

1

解決重現行爲。

該問題與用於插入新值的SQL語句有關。

正如我發現,從VolkerK提供的例子開始,在MySQL中插入位值,我應該用以下語法(從here):

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

使用這個語法我的代碼工作。

奇怪的是,將該值作爲文字插入不會導致MySQL發生任何錯誤或警告。而且,phpmyadmin在插入錯誤的語法時顯示正確的字段,而當正確的語法插入時錯誤地顯示值。

1

嘗試bindec()

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

我已經嘗試轉換結果,但bindec打印出'int(1)' – hara

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"

+0

感謝您的示例。它指向了我正確的方向。我從來沒有見過在MySQL中插入位的(正確)語法。+ 1 – hara