2012-06-23 9 views

答えて

8

は私がするだろう:私はこのコードを使用し

$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()関数を使うべきです。

+0

私は言いませんが、それは最速の方法です:)投票アップ! – Bob

+0

この方法は問題ありませんが、カラムはインデックスに登録されているため、別の方法を見つけることができないほど遅いことはわかりません。クエリーの所要時間とポストバック時間を計測する価値があります。http://api.drupal.org/api/search/7/timer_ –

6

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> 
+0

これは私がまだ見てきた最良の例ですDrupal 6の 'db_result()'関数を置き換えます(つまり 'if(db_result($ query)){//処理する} else {//レコードがない}') – DrewT

関連する問題