ertttert
Books-CMS.clan.su

Подключение к нескольким базам данных в Drupal

Уровень абстракции баз данных облегчает запоминание имен функций, а, кроме того, еще и обеспечивает защиту запросов. Иногда бывает нужно подключиться к сторонним или унаследованным базам данных, и было бы хорошо использовать для этого — а также для защиты запросов — API-интерфейс баз данных Drupal. И это действительно возможно! Например, модуль может открыть подключение к базе данных вне Drupal и извлечь оттуда данные. В файле settings.php имеется массив $databases, составленный из нескольких строк подключения к базам данных. Вот стандартный синтаксис для описания одного подключения:

array(
 'driver' => 'mysql',
 'database' => 'databasename',
 'username' => 'username',
 'password' => 'password',
 'host' => 'localhost',
 'port' => 3306,
 'prefix' => 'myprefix_',
);

Предположим, что имеются две базы данных: стандартная (с именем D7) и унаследованная, которая определена ниже:

$databases = array (

 'default' => array (
 'default' => array (
 'driver' => 'mysql',
 'database' => 'd7',
 'username' => 'username',
 'password' => 'userpassword',
 'host' => 'localhost',
 'port' => '',
 'prefix' => '',
 ),
 ),
 
 'legacy' => array (
 'default' => array (
 'driver' => 'mysql',
 'database' => 'legacydatabase',
 'username' => 'legacyusername',
 'password' => 'legacyuserpassword',
 'host' => '122.185.22.1',
 'port' => '6060',
 ),
 ),

);
На заметку! База данных, которая используется для работы сайта Drupal, всегда должна быть помечена как default.
Если нужно подключиться к одной из других баз данных в Drupal, ее можно активировать по ключевому имени, а потом вернуться к стандартному подключению:
// Получение информации из базы данных вне Drupal.
db_set_active('legacy');
$result = db_query("SELECT * FROM ldap_user WHERE uid = %d", $user->uid);
// Возврат к стандартному подключению.
db_set_active('default');
Внимание! Если переключиться на другое подключение к базе данных и попытаться выполнить что-нибудь вроде t("текст"), возникнет ошибка. Функция t() требует выполнения действий с базой данных, а подключение к базе данных остается переключенным даже за пределами области действия кода, где было выполнено это переключение. Так что всегда как можно скорее возвращайте подключение к базе данных в default, и внимательно следите, чтобы не вызвать код, который обращается к базе данных.
Поскольку уровень абстракции баз данных спроектирован для применения одинаковых имен функций для каждой базы данных, невозможно одновременно использовать несколько разных СУБД (например, MySQL и PostgreSQL). Однако в статье http://drupal.org/node/19522 имеется описание, как выполнить одновременное подключение к MySQL и PostgreSQL из одного и того же сайта.
Всего комментариев: 0
Имя *:
Email *:
Код *:


Бесплатный конструктор сайтов - uCoz