D7'de db_query'de LIKE kullanma


19

Drupal 6'da böyle bir sorgu var:

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

Ve iyi çalıştı, ama şimdi Drupal 7'ye geçiyorum.

Ben okudum ve bunun çalışması gerekiyordu, ama değil:

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

Ne yaptığımı bilen var mı?

Yanıtlar:


18

Bunu dene.

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

2
db_like ...? Neden Drupal, bunu neden yaptın?
Coomie

Evet, Drupal gibi, 7'de yeni bir db api tanıtılan db_select(), db_insert(), db_update(), db_condition(), db_like(), vb yerine kullanarak db_query(), kullanımı tavsiye eder db_select(). Buraya bakın drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/...
Sithu

6
@Coomie db_like'ye bakarsanız, kaçmanın özellikle motor başına DB katmanı tarafından yapıldığını göreceksiniz. Bu, taşınabilirlik nedenleriyle yapılır.
mpdonadio

İlk satırın virgülle bitmesi doğru mu?
Undersound

0

Aşağıdaki bağlantıyı izlerseniz, http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 Bu size şunu söyleyecektir:

Yer tutucuların "tam" bir değer olması gerektiğini unutmayın. Örneğin, bir LIKE sorgusu çalıştırırken, SQL joker karakteri,%, sorgunun kendisi değil, değerin bir parçası olmalıdır.

Yani

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

Yanlış.

Sorgu şu şekilde olmalıdır:

SELECT nid, title FROM {node} WHERE title LIKE :title;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.