Verwenden von LIKE in db_query in D7


19

Ich habe in Drupal 6 eine solche Frage:

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

Und es hat gut funktioniert, aber jetzt aktualisiere ich auf Drupal 7.

Ich habe gelesen und das soll funktionieren, aber es ist nicht:

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

Weiß jemand, was ich falsch mache?

Antworten:


18

Versuche dies.

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

2
db_like ...? Warum Drupal, warum würdest du das tun?
Coomie

Ja, eingeführt Drupal eine neue db api in 7, wie db_select(), db_insert(), db_update(), db_condition(), db_like(), usw. Statt der Verwendung db_query(), es zu benutzen , empfiehlt db_select(). Siehe hier drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/…
Sithu

6
@Coomie Wenn Sie sich db_like ansehen , werden Sie feststellen , dass die Escape-Operation spezifisch von der DB-Ebene pro Engine durchgeführt wird. Dies erfolgt aus Gründen der Portabilität.
mpdonadio

Stimmt es, dass die erste Zeile mit einem Komma endet?
Undersound

0

Wenn Sie die auf den folgenden Link followup, http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 Dies wird Ihnen sagen , dass,

Beachten Sie, dass Platzhalter ein "vollständiger" Wert sein sollten. Wenn Sie beispielsweise eine LIKE-Abfrage ausführen, sollte das SQL-Platzhalterzeichen% Teil des Werts und nicht der Abfrage selbst sein.

So

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

Ist falsch.

Die Abfrage sollte sein

SELECT nid, title FROM {node} WHERE title LIKE :title;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.