esc_sql()WP 2.8.0

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

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

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

Хуков нет.

Возвращает

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

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

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

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

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

Примеры

0

#1 Демо

echo esc_sql( 'Привет!' ); // Привет!
echo esc_sql( 'text "' );  // text \"
echo esc_sql( "text ' quote <tag> =" );  // 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"
0

#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 6.5.2

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