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 = like_escape( $string );
$string
(рядок) (обов’язковий)
Частина 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.0Use wpdb::esc_like()

Код like_escape() WP 6.0.2

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *