Podręcznik użytkownika CodeIgniter wersja 2.2.1


Łą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

  1. Wartości konfiguracyjne dla połączenia przypisane za pomocą tablicy lub ciągu DSN.
  2. TRUE/FALSE (boolean). Czy zwrócić ID połączenia (zobacz łączenie się z wieloma bazami danych poniżej).
  3. 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();