Где и когда вы используете метод котировки в 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);