mysql_real_escape_string(): доступ запрещен в codeigniter

Я использую 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? Спасибо


person 9 Digit    schedule 28.09.2012    source источник
comment
mysql_real_escape_string() Требуется по крайней мере одно открытое соединение mysql или дескриптор соединения в качестве второго параметра для работы, потому что это зависит от некоторых значений сервера, чтобы знать, как экранировать вашу строку. Поскольку библиотека Codeigniter DB, вероятно, использует библиотеку mysqli (вместо mysql).   -  person Diego    schedule 28.09.2012


Ответы (2)


Никогда не используйте пользовательский ввод непосредственно в своих запросах. Узнайте больше о «внедрении 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')); 
    
person DhruvPathak    schedule 28.09.2012

Лучший способ сделать это:

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

Взгляните на документы здесь: http://codeigniter.com/user_guide/database/queries.html

Если вы действительно хотите сделать это с помощью экранирования, посмотрите экранирующие запросы. Но лучше сделать это с привязкой (как мой пример выше)

person manavo    schedule 28.09.2012