我有这个位用于搜索数据库中的IP地址。
$this->db->where("IP1='$ip' OR IP2='$ip'");
当我使用它时,它会转义IP地址中的句点并通过生成它来破坏查询。
SELECT * FROM (`xxxx`) WHERE `IP1='111`.`111`.`111`.`111'`
我希望它能产生:
SELECT * FROM (`xxxx`) WHERE IP1='111.111.111.111' OR IP2 = '111.111.111.111'
谢谢!
答案 0 :(得分:2)
“$this->db->where()
接受可选的第三个参数。如果将其设置为FALSE,CodeIgniter将不会尝试使用反向标记保护您的字段或表名。”
$this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);
如果你这样做,你最好确保你正在对你的变量进行保护。
答案 1 :(得分:1)
这看起来像where
助手中的错误。根据{{3}},您可以包含可选的第三个参数FALSE
,以阻止CodeIgniter转义您的表/字段名称:
$this->db->where("IP1='$ip' OR IP2='$ip'", NULL, FALSE);
// ^^^^^^^^^^^^^ add this
但是,如果$ip
来自用户输入,则此查询中将不再保护您免受SQL注入。