esc_sql() WP 2.8
Подготавливает строку к использованию в SQL запросе. Защищает от SQL инъекций. Может принимать массив строк для обработки.
Работает на основе 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()
Хуков нет.
Возвращает
Строку. Очищенную строку.
Использование
$data = esc_sql( $data );
- $data(строка/массив) (обязательный)
Неочищенная строка, которая будет использоваться в аргументах SQL запроса.
Можно передать массив, тогда каждое его значение будет обработано этой функцией.
Примеры
#1 Подготовка строки для использования в 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 | Введена. |