Php 如何在Codeigniter中使用IN运算符进行绑定查询

Php 如何在Codeigniter中使用IN运算符进行绑定查询,php,sql,codeigniter,in-operator,Php,Sql,Codeigniter,In Operator,“我正在调整我的一些查询,通过使用绑定参数重写它们来防止SQL注入。这对于简单查询来说已经足够简单了: e、 g 我在使用IN运算符进行查询时遇到问题。根据建议,我尝试了以下方法: // Old code $sql = "SELECT * FROM some_table WHERE id = 7 AND author IN ('Bob','Geoff)"; $this->db->query($sql); // New Bound SQL query $sql = "SELECT

“我正在调整我的一些查询,通过使用绑定参数重写它们来防止SQL注入。这对于简单查询来说已经足够简单了:

e、 g

我在使用IN运算符进行查询时遇到问题。根据建议,我尝试了以下方法:

// Old code 
$sql = "SELECT * FROM some_table WHERE id = 7 AND author IN ('Bob','Geoff)";
$this->db->query($sql);

// New Bound SQL query
$sql = "SELECT * FROM some_table WHERE id = ? AND author IN ?";
$this->db->query($sql, array(7, array('Bob','Geoff')));
但是,此查询失败,并显示错误消息:

“您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第6行“阵列”附近

查询似乎已更改为:

"SELECT * FROM some_table WHERE id = '5' AND author IN Array"
我真的看不出我做错了什么。有什么建议吗?

你可以用

我认为您在语句中丢失了(),所以请尝试在(?)中使用

我认为答案在于这个问题:


括号似乎没有任何区别。如果我包含括号,则会出现相同的错误。因此,请尝试linkYeah中的示例。如果可能,这似乎有效。我宁愿保留与正常非IN查询相同的格式。不确定为什么不起作用。请尝试使用作者所在的某个表中的
$sql=“SELECT*?id=?“;$this->db->query($sql,array(array('Bob','Geoff'),7));
恐怕是同一个错误。如果我删除
id='5'
bit altogether,也会出现同样的错误。您使用的CI的哪个版本可能是
绑定在
功能在CI 3中可用,这意味着
其中_IN
是CI V.1.0中IN子句的最佳答案
"SELECT * FROM some_table WHERE id = '5' AND author IN Array"
$array = array('Bob', 'Geoff');
$this->db->select('*');
$this->db->where('id', 7);
$this->db->where_in('author', $array);//WHERE author IN ('Bob', 'Geoff')
$this->db->get('some_table');