like_escape()WP 2.5.0

Устарела с версии 4.0.0. Больше не поддерживается и может быть удалена. Используйте wpdb::esc_like().

Используйте взамен wpdb::esc_like(). Подготавливает строку для использования в LIKE выражении SQL запроса. С версии 4.0 считается устаревшей!

Все описанное здесь полностью справедливо для wpdb::esc_like(). Грубо говоря, вам просто нужно заменить все like_escape() на $wpdb->esc_like().

Функция не защищает строку от SQL инъекций и строка как и прежде должна быть отдельно обработана функциями $wpdb->prepare() или esc_sql().

Функция экранирует знак процента (%) и нижнее подчеркивание (_), т.к. они имеют особое значение в LIKE аргументе запроса.

Хуков нет.

Возвращает

Строку. Подготовленную для использования в значении LIKE в SQL запросе.

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

like_escape( $text );
$text(строка) (обязательный)
Часть SQL запроса, которая будет использоваться для поиска с помощью команды LIKE.

Примеры

0

#1 Пример с $wpdb->esc_like который считается правильным с версии WordPress 4.0

Этот пример, показывает как сравнить указанный УРЛ комментатора с УРЛами комментаторов которые помечены как спам:

// Обрабатываем переданный УРЛ
$url = parse_url( $suspicious_link );

// Удаляем "http://" и УРЛ параметры
if ( isset( $url['path'] ) ) {
	$link = $url['host'] . $url['path'];
} else {
	$link = $url['host'];
}

// подготавливаем для использования в LIKE аргументе
$link = $wpdb->esc_like( $link );

// добавляем знаки процента на концы аргумента поиска
$link = '%' . $link . '%';

// Создаем строку запроса с заполнителями % для замены из в $wpdb->prepare()
$sql =  "
	SELECT COUNT(*)
	FROM $wpdb->comments
	WHERE (comment_content LIKE %s OR comment_author_url LIKE %s)
		AND comment_approved = 'spam'
	";

// Подготавливаем и очищаем строку с помощью $wpdb->prepare()
$sql = $wpdb->prepare( $sql, $link, $link );

// Отправляем запрос
$matching_comments = $wpdb->get_var( $sql );

echo $matching_comments . ' spam comments found with this link.';
0

#2 Демонстрация обработки LIKE аргумента в SQL запросах

В этом примере подробно показано как следует обрабатывать LIKE аргумент SQL запроса.

Код ниже показывает как сравнить имеющуюся у нас подозрительную ссылку с ссылками в спам комментариях, чтобы выявить является ли ссылка спамом.

// $match = подозрительная ссылка
$url = parse_url($match);

// убираем "http://" и любые параметры запроса
array_key_exists('path', $url) ? $link = $url['host'] . $url['path'] : $link = $url['host'];

// подготавливаем для использования в LIKE аргументе
$link = like_escape($link);

// очистка строки также нужна
$link = esc_sql($link);
// добавляем знаки процента на концы аргумента поиска
$link = '%' . $link . '%';
// ищем спам комментарии с похожей ссылкой в тексте комментария или ссылке автора
$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;");
// Если $spammy == 1 тогда подозрительная ссылка найдена в спам комментариях

Заметки

Список изменений

С версии 2.5.0 Введена.
Устарела с 4.0.0 Use wpdb::esc_like()

Код like_escape() WP 6.5.2

function like_escape($text) {
	_deprecated_function( __FUNCTION__, '4.0.0', 'wpdb::esc_like()' );
	return str_replace( array( "%", "_" ), array( "\\%", "\\_" ), $text );
}