WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

esc_sql() WP 2.8

Подготавливает строку к использованию в SQL запросе. Защищает от SQL инъекций. Может принимать массив строк для обработки.

Ищем WP-разработчика! Фулл-тайм, удаленка, хорошая зарплата, соц. пакет. Подробности.
Компания Boosta.

Работает на основе PHP функции addslashes(), только еще может обрабатывать массивы.

Почти всегда эту функцию можно заменить на $wpdb->prepare() и такая замена рекомендуется, так как она помимо экранирования исправляет некоторые ошибки форматирования. Использовать esc_sql() может быть удобнее в тех редких случаях, когда для использования $wpdb->prepare() нужно писать дополнительный код.

В функцию можно передать массив, тогда каждое его значение будет обработано этой функцией.

Эта функция — обертка для метода wpdb::_escape(). Т.е. где удобно можно использовать этот метод взамен.

С 4.8.3, символ % будут заменен строкой-заполнителем, это предотвращает атаки SQLi. Такое изменение в поведении функции может вызвать проблемы, когда результат esc_sql() используется дальше в коде. См. wpdb::add_placeholder_escape().

Внимание! Функция рассчитана только на обработку строк, которые потом будут использованы в SQL запросе внутри кавычек: field = '$esc_value', а не field = $esc_value.

Если очищенное значение не в кавычках, то из него можно сделать инъекцию. Например строка ORDER BY $esc_value опасна...

До версии 3.6 функция была алиасом метода $wpdb->escape(), который затем был отменен.

Работает на основе: wpdb::_escape()
1 раз — -0.00003 сек (скорость света) | 50000 раз — 0.06 сек (скорость света) | PHP 7.4.8, WP 5.6.2

Хуков нет.

Возвращает

Строку|Массив. Очищенную строку.

Использование

$data = esc_sql( $data );
$data(строка/массив) (обязательный)

Неочищенная строка, которая будет использоваться в аргументах SQL запроса.

Можно передать массив, тогда каждое его значение будет обработано этой функцией.

Примеры

#1 Демо

echo esc_sql( 'Привет!' ); // Привет!
echo esc_sql( 'text "' );  // text \"
echo esc_sql( "text ' quote <tag> =" );  // text \' quote  =

#2 Подготовка строки для использования в SQL запросе

$name   = esc_sql( $name );
$status = esc_sql( $status );

$wpdb->get_var( "SELECT something FROM table WHERE foo = '$name' and status = '$status'" );

тоже самое с использованием $wpdb->prepare():

$wpdb->get_var(
	$wpdb->prepare( "SELECT something FROM table WHERE foo = %s and status = %s", $name, $status )
);

Заметки

  • Global. wpdb. $wpdb WordPress database abstraction object.

Список изменений

С версии 2.8.0 Введена.

Код esc_sql() WP 5.8.2

function esc_sql( $data ) {
	global $wpdb;
	return $wpdb->_escape( $data );
}

esc_ (очистка валидация)

query (запрос)

SQL

Комментариев нет
    Войти