0

PHP で MySql DB テーブルからビットマスクを取得しようとしています。データベースとのやり取りには meekro db ライブラリを使用します。

DB のクエリに使用されるコードは次のとおりです。

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

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

データベースから返される行には、 という名前の列が含まれています。この列は、値dayMaskとして定義されています。BIT(7)0110001

上記のコードはstring(3) "127"、私には意味がありません。マスクの 10 進数表現は49、 に127対応し1111111ます。

私は何を間違っていますか?PHPでDBからビットマスク値を取得するにはどうすればよいですか?

4

3 に答える 3

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 に答える
1

bindec()で試してください:

$dm = bindec($query['dayMask']);
于 2012-08-28T09:28:40.703 に答える