Connessione ad un Database Esterno

From Joomla! Documentation

Revision as of 19:21, 2 November 2021 by Ing Pulizzi (talk | contribs) (Created page with "$option = array(); //prevent problems $option['driver'] = 'mysql'; // Database driver name $option['host'] = 'localhost'; // Database host name $op...")
Other languages:
English • ‎italiano • ‎中文(台灣)‎

Se hai bisogno di accedere alle tabelle all'interno dello stesso database del tuo Joomla! puoi semplicemente utilizzare il metodo JFactory-> getDbo. Questo utilizza la connessione già stabilita che Joomla! utilizza per connettersi al database. Per esempio:

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

$db è ora un oggetto di tipo JDatabaseDriver ed è possibile eseguire operazioni di database su di esso utilizzando i soliti metodi.

Ma cosa succede se si desidera connettersi a un database completamente diverso da quello utilizzato da Joomla!?. Questo potrebbe essere un database diverso sulla stessa macchina del tuo Joomla! sito o potrebbe trovarsi su un host diverso e forse richiedere anche un driver di database diverso. Bene, puoi farlo usando il metodo JDatabaseDriver->getInstance.

 <?php
 $opzione = array();  //previene i problemi

$option['driver'] = 'mysql';  // Nome del driver del database
 $option['host'] = 'db.myhost.com';  // Nome host del database
 $option['user'] = 'fredbloggs';  // Utente per l'autenticazione del database
 $option['password'] = 's9(39s£h[%dkFd'; // Password per l'autenticazione del database
 $option['database'] = 'bigdatabase';  // Nome del database
 $option['prefisso'] = 'abc_';  // Prefisso del database (può essere vuoto)

$db = JDatabaseDriver::getInstance( $option );
 ?>

$db è ora un oggetto di tipo JDatabaseDriver ed è possibile eseguire operazioni di database su di esso utilizzando i soliti metodi.

Si noti che se il database utilizza un numero di porta non standard, questo può essere specificato aggiungendolo alla fine del nome host. Ad esempio, potresti avere il tuo database MySQL in esecuzione sulla porta 3307 (l'impostazione predefinita è la porta 3306), nel qual caso il tuo nome host potrebbe essere "db.myhost.com:3307".

Una caratteristica dell'utilizzo di JDatabaseDriver->getInstance è che se viene effettuata un'altra chiamata con gli stessi parametri, restituirà l'oggetto creato in precedenza piuttosto piuttosto che crearne uno nuovo.

Si noti, tuttavia, che i parametri devono corrispondere esattamente affinché ciò accada. Ad esempio, se sono state effettuate due chiamate a un database MySQL utilizzando JDatabaseDriver->getInstance, con la prima utilizzando un nome host di ' db.myhost.com' e il secondo utilizzando 'db.myhost.com:3306', verranno effettuate due connessioni separate, anche se la porta 3306 è la porta predefinita per MySQL e quindi i parametri sono logicamente gli stessi.

Se vuoi usare JModelLegacy con l'impaginazione ecc. puoi scegliere un modo diverso. Il punto è che devi sostituire l'oggetto database standard collegato al database in background di Joomla usando JModelLegacy->setDbo. Il primo passo è sovrascrivere il costruttore del tuo JModelLegacy nel tuo file di modello

public function __construct($config = array())
	 {
		parent::__construct($config);

		$option = array(); //prevent problems
 
		$option['driver']   = 'mysql';            // Database driver name
		$option['host']     = 'localhost';    // Database host name
		$option['user']     = 'myusername';       // User for database authentication
		$option['password'] = 'saltedpassword';   // Password for database authentication
		$option['database'] = 'db_extern';      // Database name
		$option['prefix']   = '';             // Database prefix (may be empty)
		
		$db = JDatabaseDriver::getInstance( $option );
		parent::setDbo($db);
	 }

Dopodiché JModelLegacy si comporta normalmente ma utilizza il database.