Używanie LIKE w db_query w D7

19

Mam takie zapytanie w Drupal 6:

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

I działało dobrze, ale teraz aktualizuję do Drupal 7.

Przeczytałem i to powinno działać, ale to nie jest:

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

Czy ktoś wie, co robię źle?

Coomie
źródło

Odpowiedzi:

18

Spróbuj tego.

 $sql = 'SELECT sid, score FROM {search_index} WHERE word LIKE :term';
 $result = db_query($sql, array(':term' => '%' . db_like($search_term)));
Sithu
źródło
2
db_like ...? Dlaczego Drupal, dlaczego miałbyś to zrobić?
Coomie
Tak, Drupal wprowadził nową db api w 7, takie jak db_select(), db_insert(), db_update(), db_condition(), db_like(), itd. Zamiast stosowania db_query(), zaleca się używać db_select(). Zobacz tutaj drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/…
Sithu,
6
@Coomie Jeśli spojrzysz na db_like , zobaczysz, że ucieczka jest wykonywana w szczególności przez warstwę DB dla poszczególnych silników. Odbywa się to ze względu na przenośność.
mpdonadio
Czy to prawda, że ​​pierwsza linia kończy się przecinkiem?
podkreślono
0

Jeśli skorzystasz z poniższego linku, http://api.drupal.org/api/drupal/include!database!database.inc/group/database/7 To powie ci, że:

Pamiętaj, że symbole zastępcze powinny być wartością „pełną”. Na przykład podczas uruchamiania zapytania LIKE znak wieloznaczny SQL,%, powinien być częścią wartości, a nie samego zapytania.

Więc

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

Jest nieprawidłowe.

Zapytanie powinno być

SELECT nid, title FROM {node} WHERE title LIKE :title;
Aneek Mukhopadhyay
źródło