Usando LIKE no db_query no D7


19

Eu tenho uma consulta como esta no Drupal 6:

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

E funcionou bem, mas agora estou atualizando para o Drupal 7.

Eu li e isso deve funcionar, mas não é:

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

Alguém sabe o que estou fazendo de errado?

Respostas:


18

Tente isso.

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

2
db_like ...? Por que Drupal, por que você faria isso?
Coomie

Sim, Drupal introduziu uma nova api db em 7, como db_select(), db_insert(), db_update(), db_condition(), db_like(), etc. Em vez de usar db_query(), ele recomenda usar db_select(). Veja aqui drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/...
Sithu

6
@Coomie Se você olhar para db_like , verá que a fuga é feita especificamente pela camada DB em uma base por mecanismo. Isso é feito por motivos de portabilidade.
mpdonadio

É correto que a primeira linha termine com vírgula?
Undersound

0

Se você seguir o link a seguir, http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 Isso informará que,

Observe que os espaços reservados devem ser um valor "completo". Por exemplo, ao executar uma consulta LIKE, o caractere curinga SQL,%, deve fazer parte do valor, não a consulta em si.

então

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

Está incorreto.

A consulta deve ser

SELECT nid, title FROM {node} WHERE title LIKE :title;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.