Codeigniter在查询中转义句点

时间:2011-10-11 23:16:01

标签: php mysql codeigniter

我有这个位用于搜索数据库中的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'

谢谢!

2 个答案:

答案 0 :(得分:2)

来自documentation

$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注入。