Переключение между базами

Главные вкладки

Аватар пользователя Antonytm Antonytm 16 сентября 2008 в 16:48

Вопрос может не совсем к Друпалу относится... Он больше касается PHP. Возможно ли проводить одновременно чтение из базы Друпала и из посторонней базы? Если да, то как?

Комментарии

Аватар пользователя direqtor direqtor 17 сентября 2008 в 6:26

Кстати, интересный вопрос. Я пока его решением не задавался, но хотелось бы знать.
Дело в том, что законнектившись к другой базе можно перебить дальнейшие обращения друпала к своей. Или все-таки его DB api прямо использует свой коннект?

Аватар пользователя server server 17 сентября 2008 в 10:55

База данных на другом сервере? если да, то надо думать в сторону постоянных соединений с ней или пробывать хранить два соединения в двух разных переменных, потом загружать с двух и сливать массив уже в php. Если на одном, то просто указывается префикс бд и дальше уже MySql (другие в теории тоже) сама определяет из какой бд какие колонки брать (так покрайней мере сделана мультисайтовая система в Drupal).
Если задаваться вопросом зачем, то тут масса вариантов, самый распространенный это просто нежелание структурировать бд в структуру таблиц Drupal, дальше можно задуматься о распределении нагрузки и.т.д.

Аватар пользователя direqtor direqtor 17 сентября 2008 в 11:47

Нет, все-таки я залез в API - [ru-api=db_set_active]

Вроде должно быть так:
В файле settings.php вместо

$db_url = 'mysql://username:password@localhost/databasename';

пишем

$db_url = array(
  'default'=>'mysql://username:password@localhost/databasename',
  'custom'=>'mysql://otherusername:otherpassword@otherhost/otherdatabasename',
);

Потом там, где нам нужно (модуль-тема-сниппет), кодим:

db_set_active('custom');
db_query('Наш запрос к другой базе');
//Далее требуемый нам код
db_set_active('default');

Кроасота!!! Если я правильно разобрался.
Попробуй проверь - у меня под рукой сервака для теста нет. Если сработает, то рецепт - в анналы.

Аватар пользователя direqtor direqtor 17 сентября 2008 в 14:30

Antonytm. Спасибо за хороший вопрос. Указанное решение отлично работает.
Эх, давно я заметок не писал... 19457#

Аватар пользователя Antonytm Antonytm 17 сентября 2008 в 15:26

Всем спасибо! Особенно direqtor! Правда на деле я обошолся более простым, но менее красивым решением. У меня были бызы на одном сервере. Поэтому переключаюсь при помощи mysql_select_db($db).