Conectar con otras bases de datos en Drupal 7
La integración es una de las necesidades que más surgen en un mundo tan globalizado como este. En muchos proyectos me toca realizar conexiones a bases de datos externas a la utilizada por Drupal, y en este artículo vamos a ver cómo hacerlo.
Conectar con la base de datos local
Cuando instalamos un Drupal 7 la configuración de conexión a la base de datos queda en el archivo /sites/default/settings.php. La conexión tiene una apariencia parecida a esta:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$databases = array ( 'default' => array ( 'default' => array ( 'database' => 'DATABASENAME', 'username' => 'USERNAME', 'password' => 'USERPASS', 'host' => 'HOST', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), ); |
Sustituyendo los parámetros DATABASENAME, USERNAME, USERPASS y HOST por los reales podremos conectar adecuadamente a la base de datos que utiliza nuestro Drupal.
Conectar con otras bases de datos
Si queremos añadir otra conexión resulta bastante sencillo, ya que únicamente debemos ampliar esa variable $databases de la siguiente forma (añadiremos dos conexiones más, pero puede haber las que sean necesarias):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$databases = array ( 'default' => array ( 'default' => array ( 'database' => 'DATABASENAME', 'username' => 'USERNAME', 'password' => 'USERPASS', 'host' => 'HOST', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), 'otrabasededatos' => array( 'default' => array( 'database' => 'OTRABDNOMBRE', 'username' => 'USUARIO', 'password' => 'PASS', 'host' => 'HOST', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), 'segundabasededatos' => array( 'default' => array( 'database' => 'OTRABDNOMBRE', 'username' => 'USUARIO', 'password' => 'PASS', 'host' => 'HOST', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), ); |
Con este sencillo cambio ya estamos capacitados para conectarnos a esas dos nuevas bases de datos. El nombre que le damos a esas bases de datos es fundamental (otrabasededatos y segundabasededatos) y puede ser cualquier cadena de texto que os sea fácil de recordar, ya que vamos a tener que echar mano de ellas.
¿Cómo conectamos?
Es sencillo. Utilizaremos un comando para cambiar la base de datos que utilizaremos en las siguientes líneas y cuando hayamos terminado volveremos a la base de datos que usa Drupal por defecto. Las funciones que utilizamos para consultar son las mismas independientemente de la base de datos a la que accedamos:
1 2 3 4 5 6 7 8 |
db_set_active('otrabasededatos'); $rs = db_query("SELECT name FROM clientes WHERE id = 2 ”); db_set_active(); if($rs->rowCount() > 0) { if($clienteRow = $rs->fetchAssoc()) { echo $clienteRow[‘name’]; } } |
Este código podría ir perfectamente en un módulo. En él obsevamos cómo nos conectamos a otra de las bases de datos configuradas, obtenemos un conjunto de registros que metemos en una variable y después conectamos de nuevo con la base de datos por defecto (no hace falta especificar el nombre). Después comprobamos que el conjunto de registros obtenidos es mayor que cero y metemos los datos del primer registro obtenido en un array. Finalmente mostramos por pantalla la columna ‘name’ del registro obtenido.