2012-06-23 13 views

Respuesta

8

que haría:

$result = db_select('taxonomy_index', 'ti') 
    ->fields('ti', array('tid')) 
    ->condition('tid', 1) 
    ->condition('nid', 1) 
    ->range(0, 1) 
    ->execute() 
    ->rowCount(); 

if ($result) { 
    drupal_set_message(t('Exists')); 
} 

No se relaciona con su pregunta, pero siempre se debe utilizar marcadores de posición para proteger contra la inyección de SQL - aunque si se utiliza el generador de consultas como la de arriba entonces se ocupa de eso por ti. Además, siempre debe usar la función t() al escribir texto en la pantalla.

+0

hmm, buena manera, pero no puedo decir, esa es la forma más rápida :) vote arriba! – Bob

+0

De esta manera está bien, las columnas están indexadas de todos modos, así que no puedo ver que esto sea lo suficientemente lento como para justificar encontrar otro camino. Puede valer la pena medir el tiempo que dura la consulta y volver a publicar, eche un vistazo a estas funciones http://api.drupal.org/api/search/7/timer_ –

6

db_select() es mucho más lento que db_query(). Consulte this thread para los escenarios donde db_select() se ajusta mejor que db_query().

db_query() -> fetchField() es el enfoque más simple. Vea el siguiente fragmento:

<?php 

// Returns string(5) "admin" 
var_dump(db_query('select name from {users} where uid = 1')->fetchField()); 

// Returns bool(false) 
var_dump(db_query('select name from {users} where uid = -1')->fetchField()); 

</pre> 
+0

Este es el mejor ejemplo que he visto hasta el momento sobre cómo reemplace la función 'db_result()' de Drupal 6 (es decir 'if (db_result ($ query)) {// do stuff} else {// no records}') – DrewT

Cuestiones relacionadas