CakeFest 2024: The Official CakePHP Conference

PDO::quote

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.1)

PDO::quote Заключает строку в кавычки для использования в запросе

Описание

public PDO::quote(string $string, int $type = PDO::PARAM_STR): string|false

PDO::quote() заключает строку в кавычки (если требуется) и экранирует специальные символы внутри строки подходящим для драйвера способом.

Если вы используете эту функцию для построения SQL запросов, настоятельно рекомендуется пользоваться методом PDO::prepare() для подготовки запроса с псевдопеременными вместо использования PDO::quote() для вставки данных введённых пользователем в SQL запрос. Подготавливаемые запросы с параметрами не только компактней, удобней, устойчивей к SQL-инъекции, но и работают быстрее, нежели вручную построенные запросы, так как клиент и сервер могут кешировать такие запросы в уже скомпилированном виде.

Не все драйверы PDO реализуют этот метод (особенно PDO_ODBC). Предполагается, что вместо него будут использоваться подготавливаемые запросы.

Предостережение

Безопасность: набор символов по умолчанию

Для корректной работы PDO::quote() набор символов должен быть задан либо на сервере, либо задаваться самим соединением с базой данных (это зависит от драйвера). Подробнее смотрите документацию к драйверу базы данных.

Список параметров

string

Экранируемая строка.

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'

Смотрите также

  • PDO::prepare() - Подготавливает запрос к выполнению и возвращает связанный с этим запросом объект
  • PDOStatement::execute() - Запускает подготовленный запрос на выполнение

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top