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.