0

bit(16)MySQL のフィールドにユーザー アカウントのタイプを保持しています。選択したユーザー タイプのクエリはすべて正常に機能しますSELECT * FROM users WHERE type & 8。 - 良好な結果が得られます。

行を に取得しています$_SESSIONが、その後は になり$_SESSION['userdata']['type'] & 8ます0。何故ですか?

var_dump($_SESSION['userdata'])与える... ["type"]=> string(2) "" ...ので大丈夫そうです。

なぜ機能しないのか、修正または少なくともデバッグする方法はありますか?

サイトのUTF8エンコードは 、php ファイルのUTF8エンコードは 、データベースUTF8のエンコードは 、データベース接続のエンコードは ですUTF8

bindec()PHP関数は役に立ちません。0 を返します。

4

1 に答える 1

0

受け入れる答えがないので、これは他の人にとって何か役立つかもしれないので、私は自分で答えます。

bitMySQL でフィールド タイプを使用する場合、PHP はそれを文字列にキャストします。デフォルトでは、PHP は文字列を 2 進数として脅かすことはないため、ビット演算を実行しようとすると単純に 0 に変換されます。理由はわかりませんが、bindec()機能が正しく動作していないようです。そのため、2 つのオプションがあります。

  1. bit次のように、フィールドに追加するだけで、MySQL クエリのフィールドを整数にキャストします+0SELECT bit_field+0 FROM table
  2. フィールドを に変更しますunsigned int。と同じように使用できbitますが、変換せずに正しい値を返します。

効率については、私が読んだ限りでは、ints は s と同じ形式で保持され、bitビットごとの操作はまったく同じ方法で行われるため、比較できるはずです。

質問にコメントしたすべての人に感謝します。

于 2013-11-08T22:27:13.907 に答える