Устранение ошибки «Отказано в доступе» при вызове mysql_real_escape_string () - PullRequest
0 голосов
/ 28 ноября 2011

Почему я не могу заставить mysql_real_escape_string работать при использовании PDO? Я получаю сообщение об ошибке при использовании

try {
    include "connect_to_db.php";

    $sql = sprintf("NULL, '%s'",
        mysql_real_escape_string('Woot')
    );
    $count = $dbh->exec($sql);
    $dbh = null;
    }
catch(PDOException $e){
    echo $e->getMessage();
}

Ошибка всегда указывает на строку, где mysql_real_escape_string равна

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in D:\pathhere\file.php on line 44

Я даже сейчас использую пользователя root для тестирования, но он все равно не будет работать.

1 Ответ

3 голосов
/ 28 ноября 2011

большинство функций mysql_ * используют ресурс подключения mysql. Как упоминается в документации этой функции, ей действительно нужен ресурс mysql_connect (), который недоступен в вашем коде, так как вы используете PDO.

Однако решение не использует эту функцию, если вы хотите убедиться, что ваш SQL безопасен. Вы можете использовать параметры в своем запросе SQL, создать подготовленный оператор , а затем выполнить его. Это решение использует PDO способ выполнения запросов и является максимально безопасным.

Обновление:

Если вам просто нужно экранировать строку для SQL с использованием PDO, вы можете использовать метод quote () объекта PDO . Однако это не обычная задача. В большинстве случаев, когда вы хотите экранировать строку для SQL-запроса, вы фактически хотите запустить запрос. Если это так, как подсказывает сама документация, лучше использовать метод prepare () объекта PDO . Вы можете прочитать раздел с примерами подготовленных документов PDO для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...