--=REKLAMA=--

Połączenie z zewnętrzną bazą danych

Z Joomla!WikiPL

Wersja Zwiastun (dyskusja | edycje) z dnia 21:53, 7 gru 2013

(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)

Jeśli potrzebujesz uzyskać dostęp do tej samej bazy danych, która została skonfigurowana podczas instalacji Joomla, możesz po prostu użyć metody JFactory->getDbo. Dzięki temu używa się połączenia, za pomocą którego Joomla! jest podłączony do bazy danych. Na przykład:

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

$db jest obecnie obiektem JDatabase i pozwala na dokonanie operacji za pomocą zwykłych metod.

Ale co zrobić, jeśli chcesz połączyć się z całkowicie inną bazą danych niż ta używana przez Joomla!? To może być inna baza danych na tym samym komputerze, co Joomla!, albo na zupełnie innym hoście, a może nawet wymagać innego sterownika. Cóż, można to zrobić za pomocą metody JDatabase->getInstance.

<?php
$option = array(); // tablica, w której umieścimy dane konfiguracji
 
$option['driver']   = 'mysql';            // nazwa sterownika bazy danych
$option['host']     = 'db.myhost.com';    // host
$option['user']     = 'fredbloggs';       // nazwa użytkownika
$option['password'] = 's9(39s£h[%dkFd';   // hasło
$option['database'] = 'bigdatabase';      // nazwa bazy danych
$option['prefix']   = 'abc_';             // prefiks (może być pusty)
 
$db = JDatabase::getInstance($option);
?>

$db jest obecnie obiektem JDatabase i pozwala na dokonanie operacji za pomocą zwykłych metod.

Zauważ, że jeśli baza danych używa niestandardowych numerów portów, to musisz dodać numer portu w nazwie hosta. Na przykład: jeśli baza danych MySQL pracuje na porcie 3307 (domyślnie 3306), to w tym przypadku nazwą hosta będzie 'db.mojhost.com:3307'.

Jedną z własności wynikającej z używania JDatabase->getInstance jest to, że jeśli wywoła się funkcję o tych samych parametrach, to zwróci ona wcześniej stworzony obiekt, zamiast tworzyć nowy.

Mimo wszystko zauważ, że parametry muszą dokładnie takie same, by zaszedł ten proces. Na przykład: jeśli dwa wywołania bazują na MySQL, używając JDatabase->getInstance, gdzie w pierwszym nazwa hosta to 'db.mojhost.com' a w drugim 'db.mojhost.com:3306', to zostaną utworzone dwa osobne połączenia, pomimo że port 3306 jest domyślnym portem dla MySQL, a parametry (biorąc pod uwagę logikę) są te same.

Jeśli chcesz użyć JModel z paginacją itd., powinieneś zrobić to na inny sposób. Chodzi o to, że musisz wymienić standardowy obiekt Joomla, używając JDatabase->setDbo. Pierwszym krokiem będzie nadpisanie konstruktora JModel w twoim pliku:

public function __construct($config = array())
	 {
		parent::__construct($config);
 
		$option = array(); // tablica, w której umieścimy dane konfiguracji
 
		$option['driver']   = 'mysql';            // nazwa sterownika bazy danych
		$option['host']     = 'db.myhost.com';    // host
		$option['user']     = 'fredbloggs';       // nazwa użytkownika
		$option['password'] = 's9(39s£h[%dkFd';   // hasło
		$option['database'] = 'bigdatabase';      // nazwa bazy danych
		$option['prefix']   = '';             // prefiks (może być pusty)
 
		$db = JDatabase::getInstance($option);
		parent::setDbo($db);
	 }

Po tym zabiegu JModel pracuje tak, jak wcześniej, ale korzysta już z twojej bazy danych.


© Ten materiał jest dokładnym albo swobodnym tłumaczeniem artykułu http://docs.joomla.org/Connecting_to_an_external_database udostępnionego na licencji JEDL na witrynie: Oficjalnej dokumentacji Joomla!.Pierwszy autor oryginału: Davenport Chris Davenport.
© Tłumaczenie: Procek. Tłumaczenie wykonano na warunkach licencji JEDL.

Dziękujemy za wkład

» Stefan Wajda [zwiastun],