Drupal 7 Drupal7:检查db条目是否存在的最快方法

Drupal 7 Drupal7:检查db条目是否存在的最快方法,drupal-7,Drupal 7,如果数据库条目存在,我如何进行最快检查?我使用以下代码: $exists = db_query('SELECT tid FROM {taxonomy_index} WHERE tid = 1 AND nid = 1 LIMIT 1'); if($exists->rowCount() > 0){ drupal_set_message("exists"); } 我会: $result = db_select('taxonomy_in

如果数据库条目存在,我如何进行最快检查?我使用以下代码:

$exists = db_query('SELECT tid FROM {taxonomy_index} WHERE tid = 1 AND nid = 1 LIMIT 1');
        if($exists->rowCount() > 0){
          drupal_set_message("exists");
         }
我会:

$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'));
}
与您的问题无关,但您应该始终使用占位符来防止SQL注入—尽管如果您使用上面提到的查询生成器,它会为您解决这一问题。此外,在向屏幕写入文本时,应始终使用t()函数。

db\u select()
db\u query()慢得多。
。有关
db\u select()
db\u query()
更适合的场景,请参阅

db\u query()->fetchField()
是最简单的方法。请参见以下代码段:

//返回字符串(5)“admin”
var_dump(db_query('select name from{users},其中uid=1')->fetchField());
//返回布尔值(false)
var_dump(db_query('select name from{users},其中uid=-1')->fetchField());

嗯,很好的方式,但我不能说,这是最快的方式:)投票吧!这种方法很好,反正这些列都被索引了,所以我看不出这样做的速度慢到足以保证找到另一种方法。也许值得计算查询所需时间和回传时间,看看这些函数只需执行
db\u查询('SELECT tid FROM{taxonomy\u index},其中tid=:tid和nid=:nid LIMIT 1',[:tid'=>1',:nid=>1])
对于SELECT语句足够安全。这是我见过的关于如何替换Drupal 6的
db_result()
函数(即
if(db_result($query)){//do stuff}else{//no records}
)的最好例子