Функция esc_sql()
в WordPress
Функция esc_sql()
предназначена для подготовки данных к использованию в запросах к базе данных MySQL. Она защищает от SQL-инъекций, обрабатывая строки данных, тем самым предотвращая возможность выполнения вредоносных запросов.
Основные сведения о функции
Эта функция работает на основе функции addslashes()
из PHP, но также может принимать массивы для обработки.
При использовании функции esc_sql()
, рекомендуется заменять её на $wpdb->prepare()
. Это связано с тем, что prepare()
корректирует некоторые ошибки форматирования, помимо экранирования символов. Однако, в редких случаях, когда нужно обработать отдельную переменную, использование esc_sql()
может быть удобнее.
Как использовать esc_sql()
Вы можете передать в функцию массив, и каждый его элемент будет обработан. С версии 4.8.3 символ %
будет заменяться на плейсхолдер, чтобы предотвратить SQL-инъекции. Изменения в поведении функции могут вызывать проблемы, если результаты esc_sql()
используются в последующем коде.
Функция предназначена исключительно для строк, которые будут использоваться в SQL-запросах внутри кавычек, например: field = '$esc_value'
, а не без кавычек field = $esc_value
. Если экранированное значение не будет заключено в кавычки, это создаст риск для SQL-инъекций. Например, использование кода ORDER BY $esc_value
будет небезопасным.
Пример использования
$name = esc_sql( $name );
$wpdb->get_var( "SELECT * FROM table WHERE foo = '$name'" );
Такой же запрос с использованием $wpdb->prepare()
:
$wpdb->get_var( $wpdb->prepare(
"SELECT * FROM table WHERE foo = %s", $name
));
Параметры функции
$data
(строка|массив) — необработанные данные, которые нужно экранировать.
Примеры работы с функцией
Вот несколько примеров использования esc_sql()
:
echo esc_sql( 'Hello!' ); // Hello!
echo esc_sql( 'text "' ); // text "
echo esc_sql( "text ' quote =" ); // text ' quote =
echo esc_sql( "some_db_1
.table_2_name" ); // some_db_1
.table_2_name
var_dump( esc_sql( 123 ) ); // string(3) "123"
Возврат значения
Функция возвращает строку или массив — экранированные данные в том же формате, что и переданные.
Примечания
- Функция является оберткой для метода
$wpdb->_escape()
. - Глобальная переменная
$wpdb
представляет объект абстракции базы данных WordPress.
Изменения
Функция была введена с версии 2.8.0 WordPress.
Заключение
Использование функции esc_sql()
— это ��ороший способ обеспечить безопасность ваших SQL-запросов в WordPress. Однако, в большинстве случаев, рекомендуется использовать $wpdb->prepare()
, так как это более надежный метод подготовки данных к запросам.
Если у вас остались вопросы или вам нужны дополнительные примеры, не стесняйтесь задавать их!