Как очистить ввод с помощью PDO?

Нужно ли использовать mysql_real_escape_string() на моем входе (например, $_POST и $_GET ), когда я использую библиотеку PDO ?

Как правильно избежать ввода пользователя с помощью PDO?

Если вы используете PDO, вы можете параметризовать свои запросы, устраняя необходимость избегать любых включенных переменных.

См. Здесь отличный вводный учебник для PDO.

Используя PDO, вы можете разделить SQL и передать параметры с помощью подготовленных операторов, это избавляет от необходимости избегать строк, поскольку, поскольку они удерживаются отдельно, а затем объединены при выполнении, параметры автоматически обрабатываются как укусы из вышеупомянутого источника:

  // where $dbh is your PDO connection $stmt = $dbh->prepare("SELECT * FROM animals WHERE animal_id = :animal_id AND animal_name = :animal_name"); /*** bind the paramaters ***/ $stmt->bindParam(':animal_id', $animal_id, PDO::PARAM_INT); $stmt->bindParam(':animal_name', $animal_name, PDO::PARAM_STR, 5); /*** execute the prepared statement ***/ $stmt->execute(); 

Примечание: санификация происходит во время привязки переменных ( $stmt->bindParam )

Другие источники:

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

http://www.phpeveryday.com/articles/PDO-Prepared-Statement-P550.html

http://php.net/manual/en/pdo.prepared-statements.php

Важным моментом при использовании PDO является:

PDO будет дезинфицировать его только для SQL, а не для вашего приложения.

Поэтому да, для записей, таких как INSERT или UPDATE, особенно важно сначала фильтровать ваши данные и дезинфицировать их для других вещей (удаление HTML-тегов, JavaScript и т. Д.).

 <?php $pdo = new PDO(...); $stmt = $pdo->prepare('UPDATE users SET name = :name WHERE id = :id'); $id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); // <-- filter your data first $name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING); // <-- filter your data first $stmt->bindParam(':id', $id, PDO::PARAM_INT); // <-- Automatically sanitized for SQL by PDO $stmt->bindParam(':name', $name, PDO::PARAM_STR); // <-- Automatically sanitized for SQL by PDO $stmt->execute(); 

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

http://www.phptherightway.com/#pdo_extension