如何在代码点火器中使用 IN 运算符进行绑定查询


How can I use IN-operator for bound queries in Codeigniter

>"我正在调整我的一些查询,通过使用绑定参数重写它们来防止 SQL 注入。这对于简单的查询来说非常简单:

例如

// Old code 
$sql = "SELECT * FROM some_table WHERE id = 4 AND author = 'Bob'";
$this->db->query($sql);
// New Bound SQL query
$sql = "SELECT * FROM some_table WHERE id = ? AND author = ?";
$this->db->query($sql, array(4, 'Bob'));

我无法让它适用于使用 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"

真的看不出我做错了什么。有什么建议吗?

您可以将where_in用作

$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');

我想你在语句中丢失了(),所以尝试使用IN(?)。

我认为答案就在这个问题中:

代码点火器 - 查询绑定"IN"参数