like_escape()
Використовуйте
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.
Приклади
#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.0.2
function like_escape($text) { _deprecated_function( __FUNCTION__, '4.0.0', 'wpdb::esc_like()' ); return str_replace( array( "%", "_" ), array( "%", "_" ), $text ); }