2012-06-23 18 views
5

डीबी प्रविष्टि मौजूद होने पर मैं सबसे तेज जांच कैसे कर सकता हूं? मैं इस कोड का उपयोग करें: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"); 
     } 

उत्तर

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 इंजेक्शन से सुरक्षा के लिए प्लेसहोल्डर का उपयोग करना चाहिए - हालांकि आप ऊपर की तरह क्वेरी बिल्डर का उपयोग करता है, तो तो यह आपके लिए इसका ख्याल रखता है। साथ ही, स्क्रीन पर टेक्स्ट लिखते समय आपको हमेशा टी() फ़ंक्शन का उपयोग करना चाहिए।

+0

हम्म, अच्छा तरीका, लेकिन मैं नहीं कह सकता, यह सबसे तेज़ तरीका है :) वोट दें! – Bob

+0

इस तरह ठीक है, स्तंभों को वैसे भी अनुक्रमित किया गया है, इसलिए मैं इसे किसी अन्य तरीके से वारंट करने के लिए पर्याप्त धीमा नहीं देख सकता। समय लगने के लायक हो सकता है कि क्वेरी कितनी देर लेती है और वापस पोस्ट कर रही है, इन कार्यों पर एक नज़र डालें http://api.drupal.org/api/search/7/timer_ –

6

db_select() db_query() से धीमा तरीका है। परिदृश्यों के लिए this thread देखें जहां db_select() db_query() से बेहतर फिट बैठता है।

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)) {// do stuff} else {// no record} ') – DrewT

संबंधित मुद्दे

 संबंधित मुद्दे