Як визначити та використовувати зовнішнє підключення до бази даних у спеціальному модулі


10

Я розробляю модуль, який значною мірою покладається на зовнішні запити до бази даних. Чи є найкраща практика визначення та використання зовнішнього підключення до бази даних у всьому модулі?

Ця сторінка розповідає про те, як встановити з'єднання, але не де його встановити в модуль (конкретний гачок?), Тому я мушу визначити його лише один раз. Також, чи завжди потрібно робити "db_set_active ('YourDatabaseKey');" чи можу я передати аргумент, який встановить використання db? Я використовую Drupal 7.


Якщо ви використовуєте різні типи баз даних , вам буде потрібно DBTNG модуль
Шиваджи

Дякуємо за пропозицію, але цей модуль необхідний, лише якщо ви використовуєте Drupal 6. Я використовую Drupal 7.
Віскі

Відповіді:


10

Немає конкретного місця, де можна поставити цей код (гачок чи модуль), ви просто покладете його там, де вам потрібно.
Таким чином, він повинен проходити безпосередньо перед вашими запитами в іншій базі даних і відразу після встановлення БД за замовчуванням.

Якщо весь ваш модуль буде покладатися на зовнішній БД, просто покладіть його на початок першої функції, що викликається для вашого модуля, і в кінці останньої функції.

Звичайно, кожна з ваших функцій повинна виконуватися на зовнішній БД, і нічого не повинно мати запит на базу даних за замовчуванням без переключення назад.

Цей код не вдасться:

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/у наступному синтаксисі

// Друпал 6

$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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.