Usando LIKE en db_query en D7

19

Tengo una consulta como esta en Drupal 6:

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

Y funcionó bien, pero ahora estoy actualizando a Drupal 7.

Leí y se supone que esto funciona, pero no es así:

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

¿Alguien sabe lo que estoy haciendo mal?

Coomie
fuente

Respuestas:

18

Prueba esto.

 $sql = 'SELECT sid, score FROM {search_index} WHERE word LIKE :term';
 $result = db_query($sql, array(':term' => '%' . db_like($search_term)));
Sithu
fuente
2
db_like ...? ¿Por qué Drupal, por qué harías eso?
Coomie
Sí, Drupal introdujo una nueva API en db 7, tales como db_select(), db_insert(), db_update(), db_condition(), db_like(), etc. En lugar de utilizar db_query(), se recomienda utilizar db_select(). Vea aquí drupal.org/developing/api/database , api.drupal.org/api/drupal/includes!database!database.inc/group/…
Sithu
66
@Coomie Si observa db_like , verá que la capa de base de datos realiza el escape específicamente por motor. Esto se hace por razones de portabilidad.
mpdonadio
¿Es correcto que la primera línea termine con una coma?
comprendido el
0

Si sigue el siguiente enlace, http://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7 Esto le dirá que,

Tenga en cuenta que los marcadores de posición deben ser un valor "completo". Por ejemplo, cuando se ejecuta una consulta LIKE, el carácter comodín de SQL,%, debe ser parte del valor, no la consulta en sí.

Entonces

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

Es incorrecto.

La consulta debe ser

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