Régi problémám, hogyan lehet Drupallal egy időben több adatbázishoz csatlakozni. Ez azért kérdés, mert előfordul az, hogy a Fejlesztő szét akarja választani a Drupal kódot az alkalmazás által kezelt kódtól, mert például nem akarja, hogy egy felhazsnáló, aki hozzáfér az adatokhoz, hozzáférjen a Drupal rendszer adataihoz is. A megoldást a settings.PHP tartalmazza egyfelől.
Amikor adatbázishoz kapcsolódunk, akkor az alábbi sort írjuk a setting.php-ban:
<?php
$db_url = 'MySQL://user:jelszo@localhost/rendszer';
?>
Ha több adatbázishoz akarunk kapcsolódni, akkor ezt módosítanunk kell úgy, hogy adatbázisaink egy tömbben legyenek, az alábbi módon:
<?php $db_url['default'] = 'mysql://user:jelszo@localhost/rendszer'; $db_url['masikdb'] = 'mysql://user1:jelszo1pwd@localhost/masikdb'; ?>
A Drupal mindig a default kapcsolathoz kapcsolódik futás közben!
Ha egy oldalon lekérdezést akarunk lefuttatni a másik adatbázison akkor először át kell állítani az aktív adatbázist a másikdb-re, lefuttatni a lekérdezést és kiértékelni, ahogyan kívánjuk, majd visszakapcsolni az aktív adatbázist a default kapcsolatra az alábbi módon:
<?php db_set_active('masikdb'); db_query('SeleCT * FROM masikdb_tabla'; //visszakapcsolás db_set_active('default'); ?>
Sajnos a módszer nem működik akkor, ha az adatbázisaink különböző típusúak, tehát az alábbi nem használható:
<?php $databases = array ("default" => "mysql://user:pass@host/db","second" => "pgsql://user:pass@host/db"); // ... ?>
Az adatbázis-kezelő rendszerek különbözősége miatt a Drupallal nem is lehet megvalósítani egyszerűen például az Oracle, SQLite vagy az MSSQL kapcsolatot. Bár nem próbáltam ki, de azért létezik megoldás - elméletileg: