Utilizzo di LIKE in db_query in D7


19

Ho una domanda come questa in Drupal 6:

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

E ha funzionato bene, ma ora sto passando a Drupal 7.

Ho letto e questo dovrebbe funzionare, ma non è:

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

Qualcuno sa cosa sto facendo di sbagliato?

Risposte:


18

Prova questo.

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

2
db_like ...? Perché Drupal, perché dovresti farlo?
Coomie,

Sì, Drupal ha introdotto una nuova API DB a 7, come ad esempio db_select(), db_insert(), db_update(), db_condition(), db_like(), ecc Invece di usare db_query(), si raccomanda di usare db_select(). Vedi qui drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/…
Sithu,

6
@Coomie Se guardi db_like , vedrai che l'escaping viene fatto specificamente dal layer DB su una base per motore. Questo viene fatto per motivi di portabilità.
mpdonadio

È corretto che la prima riga termini con una virgola?
undersound il

0

Se segui il seguente link, http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 Questo ti dirà che,

Si noti che i segnaposto devono essere un valore "completo". Ad esempio, quando si esegue una query LIKE, il carattere jolly SQL,%, dovrebbe far parte del valore, non della query stessa.

Così

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

Non è corretto.

La query dovrebbe essere

SELECT nid, title FROM {node} WHERE title LIKE :title;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.