Функция 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(), так как это более надежный метод подготовки данных к запросам.
Если у вас остались вопросы или вам нужны дополнительные примеры, не стесняйтесь задавать их!