Метод PDO

Где и когда вы используете метод котировки в PDO? Я спрашиваю об этом в свете того факта, что в PDO все цитирование выполняется объектом PDO, поэтому пользовательский ввод не должен быть экранирован / процитирован и т. Д. Это заставляет задуматься, почему беспокоиться о методе цитаты, если он не будет использоваться в подготовленном заявлении?

Хотя это не может быть единственным прецедентом, это единственный, для которого мне нужна quote . Вы можете передавать только значения, используя PDO_Stmt::execute , поэтому, например, этот запрос не будет работать:

 SELECT * FROM tbl WHERE :field = :value 

quote приходит, чтобы вы могли сделать это:

 // Example: filter by a specific column $columns = array("name", "location"); $column = isset($columns[$_GET["col"]]) ? $columns[$_GET["col"]] : $defaultCol; $stmt = $pdo->prepare("SELECT * FROM tbl WHERE " . $pdo->quote($column) . " = :value"); $stmt->execute(array(":value" => $value)); $stmt = $pdo->prepare("SELECT * FROM tbl ORDER BY " . $pdo->quote($column) . " ASC"); 

и по-прежнему ожидать, что $column будет безопасно отфильтрован в запросе.

При использовании Подготовленных заявлений с PDO::prepare() и PDOStatement::execute() вас нет каких-либо цитат : это будет сделано автоматически.

Но иногда вы не будете (или не можете) использовать подготовленные инструкции и должны будете писать полные SQL-запросы и выполнять их с помощью PDO::exec() ; в этих случаях вам нужно убедиться, что строки указаны правильно – это когда метод PDO::quote() полезен.

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

например, у меня есть функция, которая получает нагрузку текста из таблицы и записывает ее в файл. этот текст позже может быть вставлен в другую таблицу. метод quote () делает все кавычки безопасными.

это очень легко:

 $safeTextToFile = $DBH->quote($textFromDataBase);