Connectar-se a una db externa a Joomla amb el framework de Joomla

joomla

Connectar-se a una db externa a Joomla amb el framework de Joomla

Si necessitem accedir a les taules en les mateixes base de dades de la instal·lació de Joomla llavors simplement haurem d’usar el mètode JFactory->getDBO. Per exemple:

<?php
$db = JFactory::getDBO();
?>

$db és ara un objecte tipus JDatabase i podrem realitzar operacions sobre la base de dades utilitzant els mètodes habituals.

Però si el que volem és connectar-nos a una base de dades completament diferent a la usada per Joomla!?. La solució és usar el mètode JDatabase-> getInstance. 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 és ara un objecte tipus JDatabase i podrem realitzar operacions sobre la base de dades utilitzant els mètodes habituals.

Nota: Si la base de dades no fa servir el port per defecte haurem d’especificar el número del port al final del nom del host. Per exemple, podríem tenir una base de dades MySQL corrent en el port 3307 (el port per defecte és el 3306), en aquest cas el nom del host seriosa ‘db.myhost.com: 3307’.

Una característica d’usar JDatabase->getInstance és que si una altra trucada es fa amb els mateixos paràmetres es retornarà l’objecte creat prèviament en lloc de crear un de nou.

 

Nota: No obstant això, els paràmetres han de coincidir exactament perquè això passi. Per exemple, si hi ha dos cridades fetes a la base de dades usant JDatabase->getInstance, el primer usant com a nom de host ‘db.myhost.com’ i el segon ‘db.myhost.com: 3306’, llavors les dues connexions seran diferents, tot i que el port 3306 és el predeterminat i els paràmetres són lògicament els mateixos.