like_escape()
Используйте взамен 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.
Примеры
#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.';
#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 тогда подозрительная ссылка найдена в спам комментариях
Заметки
- Смотрите: wpdb::esc_like()
Список изменений
С версии 2.5.0 | Введена. |
Устарела с 4.0.0 | Use wpdb::esc_like() |
Код like_escape() like escape WP 6.6.2
function like_escape($text) { _deprecated_function( __FUNCTION__, '4.0.0', 'wpdb::esc_like()' ); return str_replace( array( "%", "_" ), array( "\\%", "\\_" ), $text ); }