dbエントリが存在する場合、どのように最速のチェックを行うことができますか?Drupal 7:dbエントリが存在するかどうかを確認する最速の方法
$exists = db_query('SELECT tid FROM {taxonomy_index} WHERE tid = 1 AND nid = 1 LIMIT 1');
if($exists->rowCount() > 0){
drupal_set_message("exists");
}
dbエントリが存在する場合、どのように最速のチェックを行うことができますか?Drupal 7:dbエントリが存在するかどうかを確認する最速の方法
$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>
これは私がまだ見てきた最良の例ですDrupal 6の 'db_result()'関数を置き換えます(つまり 'if(db_result($ query)){//処理する} else {//レコードがない}') – DrewT
私は言いませんが、それは最速の方法です:)投票アップ! – Bob
この方法は問題ありませんが、カラムはインデックスに登録されているため、別の方法を見つけることができないほど遅いことはわかりません。クエリーの所要時間とポストバック時間を計測する価値があります。http://api.drupal.org/api/search/7/timer_ –