wpdb::esc_like()publicWP 4.0.0

Подготавливает строку для использования в LIKE части SQL запроса. Обрабатывает спецсимволы % и _.

Пример:

$wild = '%';
$find = 'only 43% of planets';
$like = $wild . $wpdb->esc_like( $find ) . $wild;
$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 строки. Строка не должна иметь дополнительных или удаленных слэшей.

Примеры

0

#1 Пример подготовки строки для LIKE запроса

$wild = '%';
$find = 'only 43% of planets';
$like = $wild . $wpdb->esc_like( $find ) . $wild;
$sql  = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_content LIKE %s", $like );

echo $sql; // SELECT * FROM wp_posts WHERE post_content LIKE '{d710cab}only 43\{d710cab} of planets{d710cab}'
0

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

#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;"
);
0

#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() WP 6.5.2

public function esc_like( $text ) {
	return addcslashes( $text, '_%\\' );
}