Menggunakan LIKE di db_query di D7

19

Saya punya pertanyaan seperti ini di Drupal 6:

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

Dan itu bekerja dengan baik, tapi sekarang saya meningkatkan ke Drupal 7.

Saya membaca dan ini seharusnya berhasil, tetapi tidak:

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

Adakah yang tahu apa yang saya lakukan salah?

Coomie
sumber

Jawaban:

18

Coba ini.

 $sql = 'SELECT sid, score FROM {search_index} WHERE word LIKE :term';
 $result = db_query($sql, array(':term' => '%' . db_like($search_term)));
Sithu
sumber
2
db_like ...? Mengapa Drupal, mengapa Anda melakukan itu?
Coomie
Ya, Drupal memperkenalkan api db baru di 7, seperti db_select(), db_insert(), db_update(), db_condition(), db_like(), dll Alih-alih menggunakan db_query(), itu menyarankan untuk menggunakan db_select(). Lihat di sini drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/…
Sithu
6
@Coomie Jika Anda melihat db_like , Anda akan melihat bahwa pelarian dilakukan secara khusus oleh lapisan DB pada basis per mesin. Ini dilakukan karena alasan portabilitas.
mpdonadio
Benarkah baris pertama diakhiri dengan koma?
undersound
0

Jika Anda mengikuti tautan berikut, http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 Ini akan memberi tahu Anda bahwa,

Perhatikan bahwa penampung harus berupa nilai "lengkap". Misalnya, ketika menjalankan kueri LIKE karakter wildcard SQL,%, harus menjadi bagian dari nilai, bukan kueri itu sendiri.

Begitu

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

Salah

Kueri seharusnya

SELECT nid, title FROM {node} WHERE title LIKE :title;
Aneek Mukhopadhyay
sumber