Использование 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));

Кто-нибудь знает, что я делаю не так?

Coomie
источник

Ответы:

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, зачем ты это делаешь?
Coomie
Да, 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
Правильно ли, что первая строка заканчивается запятой?
17
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;
Анек Мухопадхяй
источник