如何最快速檢查,如果數據庫條目存在?我用這個代碼: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");
}
如何最快速檢查,如果數據庫條目存在?我用這個代碼: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_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_select()比db_query()慢。有關db_select()比db_query()更適合的方案,請參閱this thread。
db_query() - > fetchField()是最簡單的方法。看到下面的片段:
<?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>
<?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>
這是我見過的最好的例子,替換Drupal 6的'db_result()'函數(即'if(db_result($ query)){// do stuff} else {// no records}') – DrewT
嗯,好方法,但我不能說,這是最快的方法:)投票了! – Bob
這種方式很好,無論如何索引列,所以我不能看到這是足夠慢,以確保找到另一種方式。可能值得計時查詢需要多長時間並回傳,請看看這些函數http://api.drupal.org/api/search/7/timer_ –