D7의 db_query에서 LIKE 사용


19

Drupal 6에서 이와 같은 쿼리가 있습니다.

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

그리고 그것은 잘 작동했지만 이제는 Drupal 7로 업그레이드하고 있습니다.

나는 읽었고 이것이 작동해야하지만, 그렇지 않습니다 :

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

내가 뭘 잘못하고 있는지 아는 사람 있습니까?

답변:


18

이 시도.

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

2
db_like ...? 왜 드루팔, 왜 그렇게 하시겠습니까?
쿠미

예, 드루팔 같은, 7에서 새로운 DB API를 도입 db_select(), db_insert(), db_update(), db_condition(), db_like(), 등을 대신하여 db_query(), 그것을 사용하는 것이 좋습니다 db_select(). drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/…를
Sithu

6
당신이 보면 @Coomie는 db_like , 당신은 이스케이프가 당 엔진 기준으로 DB 층에 의해 구체적으로 수행되는 것을 볼 수 있습니다. 이것은 이식성 이유로 수행됩니다.
mpdonadio

첫 줄이 쉼표로 끝나는 것이 맞습니까?
undersound

0

다음 링크를 따라 가면 http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 다음과 같이 알려줍니다.

자리 표시자는 "완전한"값이어야합니다. 예를 들어 LIKE 쿼리를 실행할 때 SQL 와일드 카드 문자 %는 쿼리 자체가 아니라 값의 일부 여야합니다.

그래서

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

부정확하다.

쿼리는

SELECT nid, title FROM {node} WHERE title LIKE :title;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.