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

由于没有答案可以接受,我会回答自己,因为这可能对其他人有用。

在 MySQL 中使用bit字段类型时,PHP 将其转换为字符串。因为,默认情况下 PHP 不会将字符串作为二进制数来威胁,它只是在尝试进行一些按位运算时将其转换为 0。不知道为什么,但bindec()功能似乎不能正常工作,所以有两种选择:

  1. 在 MySQL 查询中将bit字段转换为整数,只需添加+0即可,如下所示:SELECT bit_field+0 FROM table
  2. 将字段更改为unsigned int。它将以与 相同的方式使用bit,但将返回正确的值而无需任何转换。

至于效率 - 据我所知,ints 保持与 s 相同的形式,bit并且按位运算的方式完全相同,因此应该具有可比性。

感谢所有评论这个问题的人。

于 2013-11-08T22:27:13.907 回答