esc_sql()
Подготавливает строку к использованию в 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(), который затем был отменен.
Хуков нет.
Возвращает
Строку|Массив
. Очищенную строку.
Использование
$data = esc_sql( $data );
- $data(строка/массив) (обязательный)
Неочищенная строка, которая будет использоваться в аргументах SQL запроса.
Можно передать массив, тогда каждое его значение будет обработано этой функцией.
Примеры
#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"
#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() esc sql WP 6.4.1
function esc_sql( $data ) { global $wpdb; return $wpdb->_escape( $data ); }