Використання LIKE в db_query в D7


19

У мене такий запит у Drupal 6:

$sql = 'SELECT sid, score FROM search_index WHERE word LIKE "%%%s%%"';
$result = db_query($sql,$search_term);

І це спрацювало чудово, але зараз я переходжу на Drupal 7.

Я читав, і це має спрацювати, але це не так:

$sql = 'SELECT sid, score FROM search_index WHERE word LIKE "%:term"';
$result = db_query($sql,array(':term'=>$search_term));

Хтось знає, що я роблю неправильно?

Відповіді:


18

Спробуйте це.

 $sql = 'SELECT sid, score FROM {search_index} WHERE word LIKE :term';
 $result = db_query($sql, array(':term' => '%' . db_like($search_term)));

2
db_like ...? Чому Drupal, навіщо ти це робиш?
Кумі

Так, Drupal представила нову дб апі в 7, такі як db_select(), db_insert(), db_update(), db_condition(), db_like()і т.д. Замість використання db_query(), він рекомендує використовувати db_select(). Дивіться тут drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group / ...
Ситха

6
@Coomie Якщо ви подивитесь на db_like , ви побачите, що епіляція виконується спеціально рівнем DB на основі двигуна. Це робиться з міркувань портативності.
mpdonadio

Чи правильно, що перший рядок закінчується комою?
підкреслено

0

Якщо ви перейдете за таким посиланням, http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 Це скаже вам про це,

Зауважте, що заповнювачі повинні мати значення "повне". Наприклад, при запуску запиту LIKE символом підстановки SQL,%, повинен бути частиною значення, а не самим запитом.

Так

SELECT nid, title FROM {node} WHERE title LIKE :title%;

Невірно.

Запит має бути

SELECT nid, title FROM {node} WHERE title LIKE :title;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.