Подключение к другой базе данных в Drupal 7 (2 способа)

Иногда возникает необходимость подключения к другой базе данных для получения из нее выборки данных или же наоборот для записи. При этом база данных может быть как внешней, так и располагаться на одном хосте с файлами друпала и дефолтной базой данных. Эти маневры в Drupal 7 можно выполнить двумя способами: описанием подключения в settings.php или созданием другого подключения в коде кастомного модуля.

1 способ. Описание подключения к внешней базе данных в settings.php

В файле settings.php создаем массив с описанием подключения к другой базе данных в дополнение к дефолтному подключению:


// Описание дефолтного подключения
$databases['default']['default'] = array (
  'database' => 'db-name', // Имя дефолтной базы данных.
  'username' => 'db-username',  // Имя пользователя БД.
  'password' => 'db-password',  // Пароль пользователя БД.
  'host' => 'localhost', // Имя или ip хоста с БД.
  'driver' => 'mysql', // Драйвер для подключения к базе данных.
);
// Описание подключения к другой базе данных
$databases['other_db']['default'] = array (
  'database' => 'other_db_name', // Имя другой базы данных.
  'username' => 'other_db_username', // Имя пользователя БД.
  'password' => 'other_db_password',  // Пароль пользователя БД.
  'host' => 'localhost',  // Имя или ip хоста с БД.
  'driver' => 'mysql', // Драйвер для подключения к базе данных.
);

Далее перед выполнением запросов нужно сделать подключение к другой базе данных активным:


// Указываем ключ для подключения к другой БД.
db_set_active('other_db');

// Выполняем необходимые запросы 
 
// Переключаемся обратно на дефолтную базу сайта 
db_set_active(); // По-умолчанию передается параметр 'default'

2 способ. Создание подключения к другой базе данных в коде кастомного модуля

В кастомном модуле сначала создаем массив с описанием подключения к внешней базе данных:


$other_db = array(
  'database' => 'other_db_name', // Имя другой базы данных.
  'username' => 'other_db_username', // Имя пользователя БД.
  'password' => 'other_db_password',  // Пароль пользователя БД.
  'host' => 'localhost',  // Имя или ip хоста с БД.
  'driver' => 'mysql', // Драйвер для подключения к базе данных.
);

Далее необходимо добавить информацию о подключении с помощью вызова метода addConnectionInfo() класса Database:


Database::addConnectionInfo('mymodule', 'default', $other_db);

По аналогии с предыдущим методом устанавливаем активным подключение к другой базе данных, выполняем необходимые запросы и в завершение делаем активным дефолтное подключение:


// Указываем ключ для подключения к другой БД.
db_set_active('other_db');

// Выполняем необходимые запросы 
 
// Переключаемся обратно на дефолтную базу сайта 
db_set_active(); // По-умолчанию передается параметр 'default'