Intereting Posts
Как установить пользовательскую цену в продуктах opencart? .htaccess url переписать querystring Случай MySQL с вставкой и обновлением Как преобразовать несколько многобайтовых символов в его числовой объект html с помощью PHP? ничего не отображается, когда класс находится в php-коде Как использовать контейнер Symfony 2 в устаревшем приложении Как переписать URL-адрес в php, используя файл htaccess. какое изменение в php-коде Как просматривать изображения локальной сети с удаленного интерфейса при использовании <img src = "" />? Как я могу исправить ошибку разрешения при вызове session_start ()? Использовать каждое слово строки в PHP? Прочитать последнюю строку из файла Получение всех параметров запроса в Symfony 2 Извлечение идентификаторов chid divs с помощью jquery? Редактирование файлов PHP для настройки через PHP date (), «Неверное сформированное числовое значение столкнулось» не хочет форматировать дату, прошедшую в $ _POST

Что такое PDO-эквивалент функции mysql_real_escape_string?

Я mysql_* свой код от использования mysql_* до PDO . В моем коде у меня был mysql_real_escape_string() . Что эквивалентно этому в PDO?

Related of "Что такое PDO-эквивалент функции mysql_real_escape_string?"

Ну нет, нет!

Технически существует PDO::quote() но редко используется, и это не совсем эквивалентно mysql_real_escape_string()

Это верно! Если вы уже используете PDO надлежащим образом, как описано в prepared statements , этого будет достаточно, чтобы защитить вас от инъекции mysql.


# Example:

Ниже приведен пример безопасного запроса базы данных с помощью только подготовленных операторов.

  try { // first connect to database with the PDO object. $db = new \PDO("mysql:host=localhost;dbname=xx;charset=utf8", "xx", "xx", [ PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); } catch(\PDOException $e){ // if connection fails, show PDO error. echo "Error connecting to mysql: ". $e->getMessage(); } 

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

 if($_POST && isset($_POST['color '])){ // preparing a statement $stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?"); // execute/run the statement. $stmt->execute(array($_POST['color '])); // fetch the result. $cars = $stmt->fetchAll(\PDO::FETCH_ASSOC); var_dump($cars); } 

Теперь, как вы, вероятно, можете сказать, я ничего не использовал, чтобы избежать / дезинформировать значение $_POST["color "] . И этот код защищен от myql-injection благодаря PDO и мощности подготовленных операторов.


Стоит отметить, что вы должны передать атрибут charset=utf8 в свой DSN как показано выше, по соображениям безопасности и всегда включать PDO, чтобы показывать ошибки в виде исключений.

 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 

поэтому ошибки из ваших запросов к базе данных не будут раскрывать конфиденциальные данные, такие как структура вашего каталога, имя пользователя базы данных и т. д.

И последнее, но не менее важное: бывают моменты, когда вам не следует доверять PDO 100% и будут вынуждены предпринять дополнительные меры для предотвращения внедрения sql, один из таких случаев, если вы используете устаревшие версии mysql [ mysql =< 5.3.6 ] как описано в этом ответе

Но использование подготовленных операторов, как показано выше, всегда будет более безопасным, чем использование любых функций, которые начинаются с mysql_

Хорошо читает

Обучение PDO для разработчиков MySQL

Здесь ничего нет*! Объектом PDO является то, что вам не нужно ничего избегать; вы просто отправляете его как данные. Например:

 $query = $link->prepare('SELECT * FROM users WHERE username = :name LIMIT 1;'); $query->execute([':name' => $username]); # No need to escape it! 

В отличие от:

 $safe_username = mysql_real_escape_string($username); mysql_query("SELECT * FROM users WHERE username = '$safe_username' LIMIT 1;"); 

* Ну, есть один, как сказал Майкл Берковски! Но есть лучшие способы.

 $v = '"'.mysql_real_escape_string($v).'"'; 

эквивалентно $v = $this->db->quote($v); убедитесь, что у вас есть экземпляр PDO в $this->db поэтому вы можете вызвать метод pdo quote()

Если ответить на исходный вопрос, то это эквивалент PDO для mysql_real_escape_string :

 function my_real_escape_string($value, $connection) { /* // this fails on: value="hello'"; return trim ($connection->quote($value), "'"); */ return substr($connection->quote($value), 1, -1); } 

btw, эквивалент mysqli:

 function my_real_escape_string($value, $connection) { return mysqli_real_escape_string($connection, $value); }