Werken met de database in Drupal 7 – les 2 – Databaseconfiguratie
Het belangrijkste mechanisme om een databaseverbinding te definiëren in Drupal is de array $databases in het bestand settings.php
. Zoals de naam al aangeeft, kun je via $databases meerdere databaseverbindingen configureren. Het ondersteunt ook het definiëren van meerdere targets (doelen). Een verbinding wordt pas geopend (de verbinding wordt pas werkelijk aangemaakt) wanneer een stuk code voor het eerst een query naar de database uitvoert.
Verbindingssleutel
Een verbindingssleutel is een unieke identificatie die aan een databaseverbinding wordt gegeven. Deze sleutel moet uniek zijn binnen de site en er moet altijd één standaardsleutel worden ingesteld voor de primaire database. Op de meeste sites is dit slechts één verbinding.
Doel van de verbinding
Elke verbinding moet ten minste één doel (target) hebben. Een doel specificeert welk type databaseverbinding wordt gebruikt wanneer die beschikbaar is. Als een opgegeven doel niet is gedefinieerd, zal Drupal automatisch terugvallen op het standaarddoel, dat altijd aanwezig moet zijn.
Doelen worden vooral gebruikt voor master/slave-replicatie. Standaard verwijst het doel default
naar de hoofdserver (de master). Er kunnen daarnaast één of meerdere slave
-servers worden opgegeven. Query’s die specifiek als ‘slave’ zijn gemarkeerd, zullen proberen een replica-server te gebruiken indien beschikbaar. Als dat niet lukt, wordt automatisch de master gebruikt.
Syntaxis van $databases
De $databases-array bestaat uit drie niveaus. Het eerste niveau definieert de verbindingssleutel, het tweede het doel (target) en het derde niveau bevat de verbindingsinformatie voor die sleutel/doel-combinatie. Hieronder een voorbeeld:
<?php $databases['default']['default'] = array( 'driver' => 'mysql', 'database' => 'drupaldb', 'username' => 'username', 'password' => 'secret', 'host' => 'localhost', ); ?>
In dit voorbeeld definieert $databases één verbinding met de sleutel default
en het doel default
. Deze verbinding gebruikt een MySQL-database drupaldb
op de server localhost
, met de gebruikersnaam username
en het wachtwoord secret
. Dit is de standaardconfiguratie voor de meeste Drupal-sites.
Voor een master/slave-configuratie kan het er zo uitzien:
<?php $databases['default']['default'] = array( 'driver' => 'mysql', 'database' => 'drupaldb1', 'username' => 'username', 'password' => 'secret', 'host' => 'dbserver1', ); $databases['default']['slave'][] = array( 'driver' => 'mysql', 'database' => 'drupaldb2', 'username' => 'username', 'password' => 'secret', 'host' => 'dbserver2', ); $databases['default']['slave'][] = array( 'driver' => 'mysql', 'database' => 'drupaldb3', 'username' => 'username', 'password' => 'secret', 'host' => 'dbserver3', ); ?>
Deze configuratie definieert één default
-server en twee slave
-servers. Merk op dat slave
een array is. Als een doel is gedefinieerd als een array van meerdere verbindingen, kiest Drupal willekeurig één server voor elk paginaverzoek. Dat betekent dat bij het laden van één pagina de query’s zowel via dbserver2
als dbserver3
kunnen verlopen.
<?php $databases['default']['default'] = array( 'driver' => 'mysql', 'database' => 'drupaldb1', 'username' => 'username', 'password' => 'secret', 'host' => 'dbserver1', ); $databases['extra']['default'] = array( 'driver' => 'sqlite', 'database' => 'files/extradb.sqlite', ); ?>
In dit voorbeeld is er één hoofd-Drupal-database en een extra database met de sleutel extra
, die SQLite gebruikt. Merk op dat de verbindingsinformatie voor SQLite verschilt van die voor MySQL. Elke database-driver kan zijn eigen configuratie vereisen. Ongeacht hoeveel verbindingen je definieert, Drupal opent pas extra verbindingen zodra ze daadwerkelijk nodig zijn.
Drupal 7 vereist PDO
Vanaf Drupal 7 is de PHP PDO-extensie verplicht. Je moet dus hosting gebruiken met PDO-ondersteuning om Drupal te kunnen draaien, of de PDO-bibliotheek handmatig installeren op je server.