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 7.0
function like_escape($text) {
_deprecated_function( __FUNCTION__, '4.0.0', 'wpdb::esc_like()' );
return str_replace( array( "%", "_" ), array( "\\%", "\\_" ), $text );
}