Php codeigniter mysql逐位运算符

Php codeigniter mysql逐位运算符,php,mysql,codeigniter,bitwise-operators,Php,Mysql,Codeigniter,Bitwise Operators,我的数据库(int)中有一个十进制值。我的codeigniter应用程序中有几个常量与二进制1-2-4-8- 我希望显示具有特定二进制访问级别的所有用户 public function query($level = 0) { $data = NULL; $this->db->select('user_id, user_email, user_name, user_firstname, user_imageammount, user_auth'); $this

我的数据库(int)中有一个十进制值。我的codeigniter应用程序中有几个常量与二进制1-2-4-8-

我希望显示具有特定二进制访问级别的所有用户

public function query($level = 0)
{
    $data = NULL;

    $this->db->select('user_id, user_email, user_name, user_firstname, user_imageammount, user_auth');
    $this->db->from('users');
    $this->db->where('user_auth' & $level);

    $query = $this->db->get();

    if ( $query->num_rows() > 0 )
    {
        $data = $query->result_array();
    }

    return $data;
}
当我直接在phpmyadmin中运行查询时,我得到了所需的结果

SELECT `user_id`, `user_email`, `user_name`, `user_firstname`, `user_imageammount`, `user_auth` FROM `users` WHERE `user_auth` & 1
当我在codeigniter中运行它时,我得到一个错误

严重性:警告 消息:遇到非数字值


任何帮助或建议都将受到重视。

这显然是错误的:

$this->db->where('user_auth' & $level);
首先,您没有将字符串部分连接到非字符串部分的
。即使你有
“用户认证”&$级别
,它仍然是错误的,因为操作员
&
应被视为任何操作员,如
=等,因为它也应该是字符串。目前看来,这可能是一个语法(或类似的解析)错误,一个简单的例子告诉我:

警告:在第5行的[…][…]中遇到非数值

因此,请尝试以下方法:

 $this->db->where('user_auth & '.(int)$level);
一个简单的例子说明了这一点:

 #this is wrong
 $sql = "SELECT * FROM table WHERE user_auth" & 1;

 #this is correct
 $sql = "SELECT * FROM table WHERE user_auth & 1";
对于这个家伙来说,你只需将
级别
转换为INT就可以了,因为它只是一个整数值。我必须确保大家都明白消毒总是很重要的。准备好的查询是首选的,但是如果它是一个简单的INT(很可能是从类常量中提取的),我们可以将其转换为任何不是INT的东西,只会变成
0
,最坏情况下不会返回任何结果

关键是,即使在查询中使用类常量,也应该对其进行清理。尤其是当该常量作为函数参数传入时。这是因为该函数可以用于“不干净”的数据,如果不查看大量代码,就无法知道它是否安全。如果你通过查询正确地清理它,你知道它总是被处理的,等等


享受吧

这显然是错误的
$This->db->where('user\u auth'&$level)确保这是一个简单的输入错误,在开发时应该打开完整的错误报告,然后您会将其视为一个警告。让PHP告诉你哪里出了问题。这确实是个好主意。我是php开发的新手,所以欢迎所有建议。顺便问一下,mysql中是否可以使用&~(and not)运算符?我似乎刚收到&运算符。@Pieter Jancatels,如果这确实解决了您的问题,请将答案标记为已接受(上/下投票箭头下的复选标记)。请参阅@Pieter Jancatels
&
在MySQL中运行良好(例如
选择24&~8
返回16)非常奇怪。在我的mysql中,我没有收到正确的信息。我用&运算符接收一次计数为1的数据,用&~运算符接收所有数据?