Łączenie z bazą danych
Są dwa sposoby na połączenie się z bazą danych:
Połączenie automatyczne
"Połączenie automatyczne" spowoduje załadowanie i inicjalizację klasy bazy danych przy każdym przeładowaniu strony. Aby włączyć "połączenie automatyczne" dodaj słowo database do tablicy library w poniższym pliku:
application/config/autoload.php
Łączenie manualne
Jeśli tylko niektóre ze stron wymagają połączenia z bazą danych, możesz ręcznie wykonać połączenie, poprzez dodanie poniższej linii kodu do każdej funkcji, która tego wymaga lub dodanie jej do konstruktora, aby udostępnić połączenie z bazą danych globalnie, w obrębie całej klasy.
$this->load->database();
Jeśli powyższa funkcja nie zawiera żadnej informacji w pierwszym parametrze, to połączenie zostanie wykonane do domyślnej grupy ustalonej w pliku konfiguracyjnym bazy danych.
Dostępne parametry
- Wartości konfiguracyjne dla połączenia przypisane za pomocą tablicy lub ciągu DSN.
- TRUE/FALSE (boolean). Czy zwrócić ID połączenia (zobacz łączenie się z wieloma bazami danych poniżej).
- TRUE/FALSE (boolean). Czy używać klasy Active Record. Domyślnie wartośc ustawiona na TRUE.
Manualne łączenie się z bazą danych
Pierwszy parametr tej funkcji może być opcjonalnie użyty, aby określić grupę bazy danych z pliku konfiguracyjnego. Można również wysłać w nim wartości potrzebne do połączenia z bazą, które nie są określone w pliku konfiguracyjnym. Przykłady:
Aby wybrać konkretną grupę z pliku konfiguracyjnego, można zrobić tak:
$this->load->database('nazwa_grupy');
Gdzie nazwa_grupy jest nazwą grupy odpowiedzialnej za połączenie w pliku konfiguracyjnym.
Aby połączyć się ręcznie do pożądanej bazy danych, możesz przypisać tablicę wartości:
$config['hostname'] = "localhost";
$config['username'] = "mojanazwauzytkownika";
$config['password'] = "mojehaslo";
$config['database'] = "mojabazadanych";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = "";
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";
$this->load->database($config);
Aby uzyskać informacje na temat każdej z powyższych wartości odwiedź stronę objaśniającą konfigurację.
Możesz również wysłać wartości konfiguracyjne dla bazy danych jako ciąg DSN (Data Source Name). Musi mieć on taką postać:
$dsn = 'dbdriver://nazwauzytkownika:haslo@nazwahosta/bazadanych';
$this->load->database($dsn);
Aby nadpisać domyślne wartości konfiguracyjne przy połączeniu za pomocą ciągu DSN, należy postąpić jak przedstawiono poniżej.
$dsn = 'dbdriver://nazwauzytkownika:haslo@nazwahosta/bazadanych?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
$this->load->database($dsn);
Połączenie z wieloma bazami danych
Jeśli musisz połączyć się z więcej niż jedną bazą danych na raz, możesz to osiągnąć w następujący sposób:
$DB1 = $this->load->database('grupa_pierwsza', TRUE);
$DB2 = $this->load->database('grupa_druga', TRUE);
Uwaga: Zamień słowa "grupa_pierwsza i "grupa_druga", na nazwy grup z których chcesz skorzystać (możesz również przypisać wartości konfiguracyjne, jak przedstawiono to wyżej).
Jeśli ustawimy drugi parametr na TRUE (boolean), funkcja zwróci obiekt bazy danych.
Jeśli połączysz się w ten sposób, będziesz używać nazwy obiektu przy wywoływaniu funkcji, w przeciwieństwie do składni używanej w typ podręczniku. Innymi słowy, zamiast używać sładni:
$this->db->query();
$this->db->result();
itd...
Będziesz musiał używać:
$DB1->query();
$DB1->result();
idt...
Ponowne połączenie / Utrzymywanie stałego połączenia
Jeśli limit czasu bezczynności serwera bazy danych zostanie przekroczony, podczas gdy wykonujesz jakieś skomplikowane operacje w PHP (np. przetwarzanie obrazu), powinieneś rozważyć pingowanie serwera za pomocą metody reconnect(), co może spowodować, że połączenie zostanie utrzymane lub nawiązane ponownie, zanim wyślesz kolejne zapytanie.
$this->db->reconnect();
Manualne zamykanie połączenia
CodeIgniter sam inteligentnie zajmuje się zamykaniem połączenia z bazą danych, ale możesz to zrobić również samodzielnie.
$this->db->close();