joomla

Conectarse a una db externa a Joomla con el framework de Joomla

Si necesitamos acceder a las tablas en las misma base de datos de la instalación de Joomla entonces simplementes deberemos usar el metodo JFactory->getDBO. Por ejemplo:

<?php
$db = JFactory::getDBO();
?>
$db es ahora un objeto tipo JDatabase y podremos realizar operaciones sobre la base de datos utilizando los métodos habituales.

Pero si lo que queremos es conectarnos a una base de datos completamente diferente a la usada por Joomla!?. La solución es usar el metodo JDatabase->getInstance.

<?php
$option = array(); //prevent problems

$option[‘driver’] = ‘mysql’; // Database driver name
$option[‘host’] = ‘db.myhost.com’; // Database host name
$option[‘user’] = ‘fredbloggs’; // User for database authentication
$option[‘password’] = ‘s9(39s£h[%dkFd’; // Password for database authentication
$option[‘database’] = ‘bigdatabase’; // Database name
$option[‘prefix’] = ‘abc_’; // Database prefix (may be empty)


$db = & JDatabase::getInstance( $option );
?>
$db es ahora un objeto tipo JDatabase y podremos realizar operaciones sobre la base de datos utilizando los métodos habituales.

Nota: Si la base de datos no usa el puerto por predeterminado deberemos especificar el numero del puerto al final del nombre del host. Por ejemplo, podriamos tener una base de datos MySQL corriendo en el puerto 3307 (el puerto predeterminado es el 3306), en ese caso el nombre del host seria ‘db.myhost.com:3307′.

Una caracteristica de usar JDatabase->getInstance es que si otra llamada se realiza con los mismos parámetros se devolverá el objeto creado previamente en lugar de crear uno nuevo.

Nota: Sin embargo, los parametros deben coincidir exactamente para que esto ocurra. Por ejemplo, si hay dos llamados al hechos a la base de datos usando JDatabase->getInstance, el primero usando como nombre de host ‘db.myhost.com’ y el segundo ‘db.myhost.com:3306′, entonces ambas conexiones seran diferentes, a pesar de que el puerto 3306 es el predeterminado y los parametros son logicamente los mismos.