我在 MySQL 数据库中有一个表BIT(64),其中一行是 64 个标志的位掩码。
使用 PHP 和 mysqli,我有一个整数$n,它在范围内[0, 64)。我已经编写了一个函数(见附录 I)来设置字节数组的第 n位(即 PHP 中的字符串)。
将上述字节数组(字符串)传递给 MySQL 时,似乎bitmask & ?, where ?is mysqli::bind_paramed 作为字节数组(参数类型为"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;
}