it-swarm.asia

كيفية تحديد واستخدام اتصال قاعدة بيانات خارجي في وحدة نمطية مخصصة

أقوم بتطوير وحدة تعتمد بشكل كبير على استعلامات قاعدة البيانات الخارجية. هل هناك أفضل ممارسة لتحديد واستخدام اتصال قاعدة بيانات خارجية عبر الوحدة النمطية؟

هذه الصفحة تخبرني عن كيفية إجراء الاتصال ، ولكن ليس في مكان وضعه في وحدة نمطية (ربط محدد؟) لذا لا يتعين علي تعريفه إلا مرة واحدة. أيضا ، هل من الضروري دائما أن تفعل "db_set_active ('YourDatabaseKey')؛" أو يمكنني تمرير وسيطة تعيين db للاستخدام؟ أنا أستخدم Drupal 7.

10
Whiskey

لا يوجد مكان معين لوضع هذا الرمز (خطاف أو وحدة) ، يمكنك فقط وضعه في المكان الذي تريده.
لذلك يجب أن تذهب قبل الاستعلامات الخاصة بك على قاعدة البيانات الأخرى وبعد تعطل قاعدة البيانات الافتراضية.

إذا كانت كل وحدتك ستعتمد على قاعدة البيانات الخارجية ، فقط ضعها في بداية الوظيفة الأولى التي تم استدعاؤها في الوحدة النمطية الخاصة بك وفي نهاية الوظيفة الأخيرة.

بالطبع يجب تنفيذ كل واحدة من وظائفك على قاعدة البيانات الخارجية ولا يجب أن يضطر أي شيء إلى الاستعلام عن قاعدة البيانات الافتراضية دون العودة.

سيفشل هذا الرمز التالي:

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(); 
10
tostinni

ستضطر إلى الإضافة إلى settings.php يقع في /sites/default/ في الصيغة التالية

// دروبال 6

$db_url['default'] = 'mysql://db_user:[email protected]/db_name';
$db_url['external'] = 'mysql://db_user2:[email protected]/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 () للتبديل بين قواعد البيانات.

4
Shoaib Nawaz