1

我正在使用 Codeigniter。我想在$_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中处理这个问题?谢谢

4

2 回答 2

1

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

  1. 不要使用 $_POST,而是使用输入类$this->input->post

  2. 使用查询绑定,不需要 mysql_real_escape_string。例如。

    $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
    
    $this->db->query($sql, array(3, 'live', 'Rick')); 
    
于 2012-09-28T10:39:38.823 回答
0

最好的方法是:

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

看看这里的文档:http: //codeigniter.com/user_guide/database/queries.html

如果你真的想通过转义来做到这一点,请查看转义查询。但最好用绑定来做(如我上面的例子)

于 2012-09-28T10:41:29.127 回答