mysql_real_escape_string():在codeigniter中拒绝访问

时间:2012-09-28 10:36:52

标签: php mysql codeigniter mysql-real-escape-string

我正在使用Codeigniter.i想在搜索表单中使用$_POST值中的字符串,其中可能包含特殊字符,如撇号('),(;)等。我的mysql查询如何忽略这些字符,以便我可以从数据库中选择/保存我的$_POST['search']值吗?

每当我使用mysql_real_escape_string()函数时,我都会给: mysql_real_escape_string(): Access denied error.

我的代码如下所示:

$query = "SELECT * FROM products WHERE  
product_name='".mysql_real_escape_string($_POST['search'])."'";

$this->db->query($query);

如何在codeigniter中处理这个问题?感谢

2 个答案:

答案 0 :(得分:1)

切勿直接在查询中使用用户输入。阅读更多关于“sql注入”和“xss”的信息。 对于codeIgnitor,请执行以下操作:

  1. 请勿使用$ _POST,而是使用input class$this->input->post

  2. 使用query binding,不需要mysql_real_escape_string。 例如

    $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
    
    $this->db->query($sql, array(3, 'live', 'Rick')); 
    

答案 1 :(得分:0)

最好的办法是:

$query = "SELECT * FROM products WHERE product_name=?";
$this->db->query($query, array($this->input->post('search'));

在这里查看文档:{​​{3}}

如果您真的想通过转义来执行此操作,请查看Escaping Queries。但最好用绑定来做(如上面的例子)