Skip to Content

Wechseln zu einer externen Datenbank

Um die Inhalte von Drupal und externen Anwendungen getrennt zu halten bietet es sich an verschiedene Datenbanken zu nutzen. Der Zugriff auf die externe Datentank kann auch über das Drupal-eigene Datenbankscript erfolgen. Hierfür ist es es erforderlich Drupal die Zugangsdaten mitzuteilen und die Datenbank dann jeweils umzuschalten. Die Einbindung der externen Datenbank ist auch im Script ./sites/default/settings.php niedergelegt.
// Orginaldatenbank
$db_url['default'] = 'mysql://user:password@localhost/drupal_db';
// externe Datenbank
//$db_url['externe_db'] = 'mysql://user:password@localhost/externe_db';

Jetzt hat Drupal die notwendigen Daten und Drupal kann mitgeteilt werden, wann Drupal eine andere Datenbank nutzen soll.
// Drupal db auf die extere Datenbank umstellen
function meinModul_xyz()
{
db_set_active('externe_db');
 
/**
*
* Diverse Datenbankoperationen *
*/
 
// Die Datenbank wieder auf Default-Wert setzen
db_set_active('default');
} // END meinModul_xyz()
Beim arbeiten mit externen Datenbank muss man allerrdings sehr vorsichtig sein, sobald eine Fehlermeldung aus einer Datenbankoperation generiert wird, versucht Drupal diese auszugeben - hierfür sind allerdings Datenbankoperationen auf der Drupaleigenen Datenbank notwendig und diese kann zu diesem Zeitpunkt nicht erreicht werden, da Drupal ja momentan auf der externen Datenbank steht. Die Folge ist eine Fehlermeldung die in einer BLANK-Seite ausgegeben wird, da Drupal auch für den Seitenaufbau seine eigene Datenbank benötigt. Es sollten alle Operationen daher doppelt abgesichert werden, z. B. eine Passwortabfrage auf eine externe Datenbank:
// Drupal db auf die externe Datenbank umstellen
db_set_active('externe_db');  
// Query mit den notwendigsten Daten holen
$query = 'SELECT externerUser, uid FROM externe_db AS mm WHERE mm.benutzername = LOWER("%s") AND mm.password = LOWER("%s") AND mm.status_id > 1;';
 
// Query ausführen
$result = db_query($query, $username, $password);
 
// Ermittel der Anzahl der Datensätze
$anzahl_datensaetze = db_num_rows($result);
 
// kein treffender User gefunden
if($anzahl_datensaetze == 0)
{
drupal_set_message('Es ist keine User mit Ihren Daten registriert.');
 
// Zurücksetzen zur Drupal-Datenbank
db_set_active('default');  
 
return false;
} // hier gibt es mehrere Datensätze
elseif($anzahl_datensaetze > 1)
{
drupal_set_message('Es gibt Probleme mit Ihrem Account, bitte wenden Sie sich an den Administrator - Fehlernummer d556.');
 
// Zurücksetzen zur Drupal-Datenbank
db_set_active('default');
 
return false;
}
elseif(db_error() != '')
{
drupal_set_message('Es gibt Probleme mit Ihrem Account, bitte wenden Sie sich an den Administrator - Fehlernummer d556.');
// Zurücksetzen zur Drupal-Datenbank
db_set_active('default');
 
return false;
}  
 
// holen der Mitglieds-Daten
$mitglied = db_fetch_array($result);  
// Zurücksetzen zur Drupal-Datenbank
db_set_active('default');

Ansonsten ist das Arbeiten mit externen Datenbanken problemlos.