Функция esc_sql() в WordPress: безопасные SQL-запросы.

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

Если у вас остались вопросы или вам нужны дополнительные примеры, не стесняйтесь задавать их!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *