>"我正在调整我的一些查询,通过使用绑定参数重写它们来防止 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"参数