Функция LIKE_ESCAPE() в WordPress: устаревшая и заменяется wpdb::esc_like()

LIKE_ESCAPE() │ WP 2.5.0

Функция LIKE_ESCAPE() устарела с версии 4.0.0. Она больше не поддерживается и может быть удалена в будущих обновлениях. Вместо неё рекомендуется использовать wpdb::esc_like().

Ранее функция использовалась для обработки строк перед их поиском в базе данных, но была плохо задокументирована и не работала как следует.

Возвращаемое значение

Тип: строка. Это текст, безопасный для использования в запросах с LIKE.

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

like_escape( $text );

Параметры

  • $text (строка) (обязательный) — текст, который нужно обработать.

Примеры

Пример 1: Использование wpdb::esc_like()

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

// Обработка переданной ссылки
$url = parse_url( $suspicious_link );

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

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

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

// Создаем строку запроса с % как плейсхолдерами
$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 . ' спам-комментариев найдено с этой ссылкой.';

Пример 2: Обработка аргумента LIKE в SQL-запросах

Этот пример показывает, как правильно обработать аргумент LIKE в SQL-запросах.

// Подготовка для использования в аргументе 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, то подозрительная ссылка найдена в комментариях со спамом

Примечания

  • Используйте wpdb::esc_like() для безопасности и правильной работы с SQL-запросами.

Изменения

  • С версии 2.5.0 введена. Устарела с версии 4.0.0. Используйте wpdb::esc_like().

Код функции LIKE_ESCAPE()

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

Связанные функции

  • esc_sql()
  • get_boundary_post()
  • get_children()
  • get_page_by_title()
  • get_pages()
  • get_posts()
  • get_queried_object()
  • get_queried_object_id()
  • get_query_var()
  • have_posts()
  • query_posts()
  • rewind_posts()
  • set_query_var()
  • setup_postdata()
  • wp()
  • wp_get_recent_posts()
  • WP_Query()
  • wp_reset_query()
  • wp_reset_vars()

Эта статья должна помочь вам понять, как правильно использовать функции для обработки SQL-запросов и избегать устаревших методов.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *