wpdb get_results пуст, когда ключевое слово содержит амперсанд (хотя тот же самый запрос прекрасно работает в phpMyAdmin SQL)

У меня очень специфическая проблема с wpdb-> get_results
Я реализовал пользовательский поисковый запрос, который позволяет искать во всех наших пользовательских типах и таблицах с пользовательской структурой.
Запрос работает нормально (поэтому проблема с подключением к БД отсутствует), пока ключевое слово в поиске не содержит амперсанд (&).
Настоящая загадка заключается в том, что если я повторяю сам запрос и затем запускаю его через phpMyAdmin SQL, запрос возвращает ожидаемые (и желаемые) результаты.
Я пытался использовать MySQL, но безрезультатно.

Вот важная часть кода, используемого в поисковой системе:

$request = "SELECT DISTINCT
SQL_CALC_FOUND_ROWS
p.ID,
(SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'latitude') AS latitude,
(SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'longitude') AS longitude
FROM wp_posts p
WHERE p.post_type = 'studia'
AND (SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'latitude') > 0
AND (SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'longitude') > 0
AND ((SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'mesto' LIMIT 1) LIKE '%" . $keyword . "%'
OR p.post_title LIKE '%" . $keyword . "%'
OR (SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'ulice' LIMIT 1) LIKE '%" . $keyword . "%'
OR (SELECT IF(pm.meta_value LIKE 'a:%',(SELECT post_title FROM wp_posts WHERE ID = SUBSTRING_INDEX(SUBSTRING_INDEX(pm.meta_value,'\"',2),'\"',-1)), pm.meta_value ) FROM wp_postmeta pm WHERE pm.post_id = p.ID AND meta_key = 'studio' ) LIKE '%" . $keyword . "%')";
echo $request;
$studios = $wpdb->get_results( $request);

и вот повторный пример (ключевое слово: YOGA & ИЗОБРАЗИТЕЛЬНОЕ ИСКУССТВО) запрос который опять возвращает желаемые результаты в phpMyAdmin, но не на сайте

SELECT DISTINCT SQL_CALC_FOUND_ROWS p.ID, (SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'latitude') AS latitude, (SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'longitude') AS longitude FROM wp_posts p WHERE p.post_type = 'studia' AND (SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'latitude') > 0 AND (SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'longitude') > 0 AND ((SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'mesto' LIMIT 1) LIKE '%YOGA & ART%' OR p.post_title LIKE '%YOGA & ART%' OR (SELECT meta_value FROM wp_postmeta WHERE post_id = p.ID AND meta_key = 'ulice' LIMIT 1) LIKE '%YOGA & ART%' OR (SELECT IF(pm.meta_value LIKE 'a:%',(SELECT post_title FROM wp_posts WHERE ID = SUBSTRING_INDEX(SUBSTRING_INDEX(pm.meta_value,'"',2),'"',-1)), pm.meta_value ) FROM wp_postmeta pm WHERE pm.post_id = p.ID AND meta_key = 'studio' ) LIKE '%YOGA & ART%')

1

Решение

Я нашел ответ. Проще говоря, так как я вторил запрос, формат отображения не был идентичен тому, что было фактически отправлено, получается, что сущность HTML & был фактически отправлен вместо символа &, Так просто заменить решил мою проблему.

$keyword = str_replace("&", "&", $keyword);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector