wpdb::esc_like()
Подготавливает строку для использования в LIKE части SQL запроса. Обрабатывает спецсимволы %
и _
.
Пример:
$find = 'only 43% of planets'; $like = '%' . $wpdb->esc_like( $find ) . '%'; $sql = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_content LIKE %s", $like );
Пример цепочки вызовов:
$sql = esc_sql( $wpdb->esc_like( $input ) );
Используйте перед wpdb::prepare() или esc_sql().
Не защищает от SQL инъекций. Для такой защиты результат нужно дополнительно обработать одной из функций: wpdb::prepare() или esc_sql().
Используется вместо устаревшей с WP 4.0. функции like_escape( $string ).
Метод класса: wpdb{}
1 раз — 0.00001 сек (скорость света) | 50000 раз — 0.01 сек (скорость света) | PHP 7.4.8, WP 5.6.2
Хуков нет.
Возвращает
Строку
. Текст для LIKE части запроса. Результат не очищен для SQL запроса, поэтому используйте wpdb::prepare() или wpdb::_real_escape() для добавления результата в запрос.
Использование
global $wpdb; $wpdb->esc_like( $text );
- $text(строка) (обязательный)
- Необработанный текст, спец-символы в котором нужно экранировать для LIKE строки. Строка не должна иметь дополнительных или удаленных слэшей.
Примеры
#1 Пример подготовки строки для LIKE запроса
$find = 'only 43% of planets'; $sql = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_content LIKE %s", '%' . $wpdb->esc_like( $find ) . '%' ); echo $sql; // SELECT * FROM wp_posts WHERE post_content LIKE '{d710cab}only 43\{d710cab} of planets{d710cab}'
#2 Пример с esc_sql()
$esc_like = $wpdb->esc_like( 'only 43% of planets' ); echo $esc_like; // only 43\% of planets echo esc_sql( $esc_like ); // only 43\{f5fa52} of planets
#3 Еще пример подготовки строки для LIKE запроса
global $wpdb; $link = $wpdb->esc_like( $link ); // подготовим строку для LIKE аргумента $link = esc_sql( $link ); // очистим переменную $link = '%' . $link . '%'; // создадим полную переменную поиска LIKE // найдем комментарии в тексте или ссылке автора, есть указанная ссылка $spammy = $wpdb->query("SELECT comment_approved FROM $wpdb->comments WHERE (comment_content LIKE '$link' OR comment_author_url LIKE '$link') AND comment_approved = 'spam' LIMIT 1;" );
#4 Короткая запись с prepare()
global $wpdb; $link = '%' . $wpdb->esc_like( $link ) . '%'; $comment = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_author_url LIKE %s LIMIT 1", $link ) );
Список изменений
С версии 4.0.0 | Введена. |
Код wpdb::esc_like() wpdb::esc like WP 6.8
public function esc_like( $text ) { return addcslashes( $text, '_%\\' ); }