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?

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)));

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;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.