我在 MySQL 数据库中有一个表BIT(64)
,其中一行是 64 个标志的位掩码。
使用 PHP 和 mysqli,我有一个整数$n
,它在范围内[0, 64)
。我已经编写了一个函数(见附录 I)来设置字节数组的第 n位(即 PHP 中的字符串)。
将上述字节数组(字符串)传递给 MySQL 时,似乎bitmask & ?
, where ?
is mysqli::bind_param
ed 作为字节数组(参数类型为"s"
),并没有按预期比较位。
例如,使用此查询:
SELECT id FROM my_table WHERE (bitmask & ?) > 0
在这张桌子上:
CREATE TABLE my_table (id INT PRIMARY KEY, bitmask BIT(64));
如何解决这个问题?
我想通过 abin2hex
和UNHEX()
它,但这似乎并不能解决问题。
附录一
public static function setNthBit(int $n, int $bytes = 8) : string{
$offset = $n >> 3;
$byteArray = str_repeat("\0", $bytes);
$byteArray{$bytes - 1 - $offset} = chr(1 << ($n & 7));
return $byteArray;
}