(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.1)
PDO::quote — Форматирует строку в SQL-литерал
С параметрами по умолчанию метод PDO::quote() оборачивает входные строковые данные кавычками и попутно экранирует спецсимволы в стиле конкретного PDO-драйвера.
Разработчики языка настоятельно рекомендуют подготавливать запросы методом PDO::prepare() и привязывать параметры, а не интерполировать пользовательский ввод в SQL-инструкцию методом PDO::quote(). Подготовленные запросы с привязкой параметров проще в построении, универсальнее при переносе между БД, надёжнее в части устойчивости к SQL-инъекциям и часто выполняются быстрее запросов с интерполяцией за счёт кеширования скомпилированной формы запроса клиентом и сервером.
Метод поддерживается не каждым PDO-драйвером, например, в драйвере PDO_ODBC метод не реализовали. Лучше предпочесть подготовленные запросы вместо форматирования строк этим методом.
Метод PDO::quote() работает корректно только при установке правильной кодировки символов — либо на уровне сервера БД, либо в настройках соединения, в зависимости от конкретного PDO-драйвера. Дополнительную информацию содержит документация к конкретному драйверу.
stringСтрока, которую требуется отформатировать для безопасного встраивания в текст SQL-запроса.
type
Подсказка типа данных. В драйверах, которые учитывают параметр, подсказка определяет стиль обрамления кавычками и синтаксис экранирования.
Флаг PDO::PARAM_LOB, например, укажет драйверу экранировать значение как двоичные данные.
Метод возвращает отформатированную строку, которую, теоретически, безопасно встраивать
в тело SQL-запроса. Метод возвращает значение false, если драйвер не поддерживает
форматирование таким способом.
Пример #1 Форматирование стандартной строки
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');
/* Обыкновенная строка */
$string = 'Nice';
print "Исходная строка: $string\n";
print "Отформатированная строка: " . $conn->quote($string) . "\n";Результат выполнения приведённого примера:
Исходная строка: Nice Отформатированная строка: 'Nice'
Пример #2 Форматирование строки с одинарной кавычкой
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');
/* Опасная строка */
$string = 'Naughty \' string';
print "Исходная строка: $string\n";
print "Отформатированная строка: " . $conn->quote($string) . "\n";Результат выполнения приведённого примера:
Исходная строка: Naughty ' string Отформатированная строка: 'Naughty '' string'
Пример #3 Форматирование строки со смешанными кавычками
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');
/* Сложная строка */
$string = "Co'mpl''ex \"st'\"ring";
print "Исходная строка: $string\n";
print "Отформатированная строка: " . $conn->quote($string) . "\n";Результат выполнения приведённого примера:
Исходная строка: Co'mpl''ex "st'"ring Отформатированная строка: 'Co''mpl''''ex "st''"ring'