कैसे कस्टम मॉड्यूल में एक बाहरी डेटाबेस कनेक्शन को परिभाषित और उपयोग करें


10

मैं एक मॉड्यूल विकसित कर रहा हूं जो बाहरी डेटाबेस प्रश्नों पर बहुत अधिक निर्भर करेगा। क्या एक मॉड्यूल में बाहरी डेटाबेस कनेक्शन को परिभाषित करने और उपयोग करने के लिए सबसे अच्छा अभ्यास है?

यह पृष्ठ मुझे बताता है कि कनेक्शन कैसे बनाया जाए, लेकिन इसे मॉड्यूल (विशिष्ट हुक) में कहां रखा जाए, इसलिए मुझे केवल इसे एक बार परिभाषित करना होगा। इसके अलावा, "db_set_active ('YourDatabaseKey')" करना हमेशा आवश्यक होता है; या क्या मैं एक तर्क पारित कर सकता हूं जो उपयोग करने के लिए डीबी सेट करेगा? मैं ड्रुपल 7 का उपयोग कर रहा हूं।


यदि आप विभिन्न प्रकार के डेटाबेस का उपयोग कर रहे हैं, तो आपको
सिवाजी

सुझाव के लिए धन्यवाद, लेकिन यह मॉड्यूल केवल आवश्यक है यदि आप Drupal 6 का उपयोग कर रहे हैं। मैं Drupal 7 का उपयोग कर रहा हूँ
व्हिस्की

जवाबों:


10

इस कोड (हुक या मॉड्यूल) को डालने के लिए कोई विशेष स्थान नहीं है, आप इसे वहीं रख सकते हैं, जहां आपको इसकी आवश्यकता है।
तो यह अन्य डेटाबेस पर आपके प्रश्नों से पहले और डिफ़ॉल्ट डीबी को वापस सेट करने के ठीक बाद जाना चाहिए।

यदि आपके सभी मॉड्यूल बाहरी डीबी पर भरोसा करेंगे, तो बस इसे अपने मॉड्यूल के लिए बुलाए गए पहले फ़ंक्शन की शुरुआत और अंतिम फ़ंक्शन के अंत में डाल दें।

बेशक, आपके प्रत्येक फ़ंक्शन को बाहरी DB पर निष्पादित किया जाना चाहिए और वापस स्विच किए बिना डिफ़ॉल्ट डेटाबेस को क्वेरी करने के लिए कुछ भी नहीं होना चाहिए।

यह निम्नलिखित कोड विफल होगा:

db_set_active('YourDatabaseKey');

$result = db_query('SELECT ...'); //Your own queries on the external DB.

$node = node_load(123); //This would fail on the external DB.

$result = db_query('SELECT ...'); //Your own queries on the external DB.

db_set_active(); 

आपको आगे और पीछे स्विच करना चाहिए:

db_set_active('YourDatabaseKey');

$result = db_query('SELECT ...'); //Your own queries on the external DB.

db_set_active(); 
$node = node_load(123); //Query made on the default Drupal DB.
db_set_active('YourDatabaseKey');

$result = db_query('SELECT ...'); //Your own queries on the external DB.

db_set_active(); 

2
स्पष्टीकरण के लिए धन्यवाद। मैंने एक अलग फ़ंक्शन तैयार किया जो मेरे बाहरी db को db_set_active के साथ चुनता है और यदि वह विफल रहता है, तो यह db कॉन्फ़िगरेशन को जोड़ता है और फिर से कोशिश करता है। इस तरह से मैं बाहरी प्रश्नों को चलाने से पहले इसे अलग-अलग हुक में उपयोग कर सकता हूं, लेकिन जैसा कि आपने बताया था कि मुझे फिर से डिफ़ॉल्ट सक्रिय सेट करने की आवश्यकता है।
व्हिस्की

4

आप में जोड़ना होगा settings.phpपर स्थित /sites/default/निम्न सिंटैक्स में

// द्रुपाल ६

$db_url['default'] = 'mysql://db_user:password@localhost/db_name';
$db_url['external'] = 'mysql://db_user2:password@localhost/db_name2';

// ड्रुपल 7

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'db1',
      'username' => 'user1',
      'password' => 'pass',
      'host' => 'host1',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
  'extra' =>
  array (
    'default' =>
    array (
      'database' => 'db2',
      'username' => 'user2',
      'password' => 'pass',
      'host' => 'host2',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

और इन सेटिंग्स के बाद आप डेटाबेस के बीच स्विच करने के लिए db_set_active () का उपयोग कर सकते हैं।


धन्यवाद, आप इसे इस तरह से कर सकते हैं, लेकिन मैंने अपने मॉड्यूल के भीतर से ऐसा करने का विकल्प चुना जैसा कि मैंने प्रश्न में जुड़े पेज पर वर्णित किया है। इस तरह से आप एक व्यवस्थापक सेटिंग फ़ॉर्म पर उपयोगकर्ताओं को अपने स्वयं के कॉन्फ़िगरेशन में भर सकते हैं।
व्हिस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.