3

“我正在调整我的一些查询,以通过使用绑定参数重写它们来防止 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 行的 'Array' 附近使用正确的语法”

似乎查询已更改为:

"SELECT * FROM some_table WHERE id = '5' AND author IN Array"

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

4

2 回答 2

3

您可以使用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');
于 2016-07-12T09:02:49.707 回答
0

我认为您在语句中丢失了 (),因此请尝试使用 IN (?)。

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

CodeIgniter - 查询绑定“IN”参数

于 2016-07-12T09:03:24.740 回答