Trabajar con una base de datos en Drupal 7 - Lección 2 - Configuración de la base de datos
El principal medio para definir la conexión a la base de datos en Drupal es el array $databases en el archivo settings.php. Como sugiere el nombre, $databases permite definir múltiples conexiones a bases de datos. También admite la definición de múltiples objetivos. La conexión no se abre (no se crea un objeto de conexión) hasta que algún fragmento de código realice una consulta a la base de datos por primera vez.
Clave de conexión
La clave de conexión es un identificador único asignado a una conexión de base de datos. Esta clave debe ser única para el sitio y debe establecerse por defecto para la base de datos principal. En la mayoría de los sitios, solo se usará una conexión.
Objetivo de la conexión
Una conexión debe tener uno o más objetivos. Un objetivo es un procesamiento opcional de la base de datos para usarla si está disponible. Si el objetivo solicitado no está definido, el sistema accederá silenciosamente al objetivo por defecto, que siempre debe estar definido.
Los objetivos se utilizan principalmente para replicación master/slave. Por defecto, el objetivo es el servidor SQL principal. Uno o más objetivos "slave" también pueden definirse. Las consultas marcadas intentarán usar un servidor SQL adicional si está disponible. Si lo logran, se usará un servidor slave, de lo contrario se utilizará el servidor principal.
Sintaxis de $databases
El array $databases es un array anidado de tres niveles. El primer nivel define la clave de conexión. El segundo nivel define el objetivo de conexión. El valor de cada objetivo es la información de conexión para la pareja clave/objetivo. A continuación se muestra un ejemplo para aclararlo:
<?php $databases['default']['default'] = array( 'driver' => 'mysql', 'database' => 'drupaldb', 'username' => 'username', 'password' => 'secret', 'host' => 'localhost', ); ?>
El array $databases define una única conexión con la clave ("default") y el objetivo ("default"). Esta conexión usa una base de datos MySQL ("driver" - mysql) en el servidor localhost, a la base de datos drupaldb, con el usuario username y contraseña secret. Esta es la configuración habitual en la mayoría de los sitios.
Para una configuración master/slave se usa la siguiente definición:
<?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', ); ?>
Esta configuración proporciona un servidor "default" y dos servidores "slave". Observa que la clave "slave" es un array. Si algún objetivo se define como un array de conexiones, un servidor específico será seleccionado aleatoriamente para cada solicitud de página. Esto significa que en una sola página, todas las consultas podrían ir a dbserver2 o dbserver3.
<?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', ); ?>
Esta configuración define una base de datos principal para Drupal y una base de datos adicional llamada "extra", que utiliza SQLite. Observa que la información de conexión para SQLite difiere de la usada con MySQL. Cada driver puede tener una configuración diferente sobre cómo debe utilizarse. Recuerda que no importa cuántas conexiones estén definidas: Drupal no abrirá una conexión con otra base de datos mientras se use la base de datos por defecto.
Drupal 7 requiere PDO
Ahora la biblioteca PHP PDO es obligatoria para Drupal. Necesitarás un hosting que soporte PDO para ejecutar Drupal o instalar la biblioteca correspondiente en tu servidor.