Ustalilismy juz, ze system powinien wspierac kilka interfejsow baz danych (m.in. MySQL oraz PostgreSQL). W tym celu potrzebowac bedziemy klasy DB ktora spokojnie mozemy zaczerpnac z projektu Coyote.
W calym systemie, glownym plikiem, przechowujacym podstawowa konfiguracje (hasla, nazwe bazy danych) powinien byc plik 'config.php'. W tym pliku powinna znalezc sie rowniez stala okreslajaca warstwe SQL aktualnie uzywana przez system:
DEFINE('SQL_LAYER', 'MySQL);
W glownym katalogu projektu powinien znalezc sie plik 'db.php', ktory w zaleznosci od wybranej warstwy, wlaczy do systemu dany modul, ktory z kolei zawierac bedzie klase DB(). Czyli taka struktura katalogow:
- db/
- mysql.php
- db.php
Na razie zakladamy, ze korzystamy z MySQL wiec w katalogu db/ mamy jedynie plik mysql.php ktory zawiera wersje klasy db() dla MySQL.
Oto wlasciwosci oraz metody klasy, ktore proponuje, aby sie znalazly w klasie DB():
Klasa DB:
<font size="2" color="darkred">Wlasciwosci:</span>
- query_result
Zmienna $query_result powinna przechowywac identyfikator danego zapytania zwracany przez funkcje PHP - mysql_query().
- sql_query
Tresc zapytania SQL
- connection_id
Identyfikator polaczenia z baza danych
- transaction
Zmienna, ktora moze przybrac true lub false w zaleznosci od tego czy sesja jest wlaczona czy tez nie. To nic, ze na razie MySQL nie obsluguje sesji - jest to raczej myslenie na przyszlosc.
<font size="2" color="darkred">Metody:</span>
- db()
Konstruktor klasy, ktory polaczy sie z baza danych oraz wybierze dana baze.
- sql_query($sql_query, $error = true)
Funkcja ktora na podstawie parametru $sql_query wykona polecenie zawarte w tym zapytaniu. W przypadku wystapienia bledu, jezeli parametr $error == true dzialanie systemu zostanie przerwane, wygenerowany zostanie blad, a sama funkcja zwroci false. Jezeli parametr $error == false, blad nie zostanie wygenerowany, lecz funkcja zwroci false.
- sql_transaction($status = 'BEGIN')
Funkcja ktora rozpocznie transakcje (jezeli parametr to BEGIN), zaakceptuje zmiany (jezeli parametr to COMMIT) oraz cofnie wprowadzone dane (jezeli parametr to ROLLBACK).
- sql_counter()
Funkcja zwroci liczba zapytan skierowanych do bazy danych
- sql_nextid()
Funkcja zwroci ID wstawionego rekordu (wywola funkcja mysql_insert_id() z PHP).
- sql_result()
Funkcja zwroci identyfikator zwrocony po wykonaniu zapytania, przez funkcje mysql_query(). Identyfikator pobrany zostanie z wlasciwosci $query_result.
- sql_affected()
Funkcja zwroci liczbe rekordow uaktuanionych przez baze w wyniku uzycia zapytania UPDATE lub liczbe elementow skasowanych.
- sql_numfields($query_result = 0)
Zwraca liczbe rekordow pobranych przy pomocy zapytania SELECT. Funkcja umozliwi podanie identyfikatora zapytania ($query_result) do ktorego chcemy sie odwolac.
- sql_fetch($query_result = 0)
Pobiera tablice danych z MySQL (wykonuje funkcje mysql_fetch_array() z PHP).
- sql_free($query_result = 0)
Zwalnia zasoby zajete przez dane zapytanie.
- sql_rows($tbl_name, $column = '')
Umozliwia policzenie ilosci rekordow znajdujacych sie w tabeli okreslonej w $tbl_name. Parametr $column umozliwia przekazanie dodatkowego kodu SQL, ktory ograniczy liczbe policzonych rekordow. Np. sql_rows('users', ' WHERE user_id > 100'); W takim wypadku funkcja zwroci ilosc rekordow z tabeli 'users' z pominieciem tych ktorych ID jest mniejsze niz 100.
- sql_error($sql_error)
Formuluje dzinnik ktory zostanie wyswietlony w razie bledu zwiazanego z blednym zapytaniem SQL.
- sql_version()
Zwraca numer wersji systemu bazodanowego.
Jezeli nikt nie ma nic przeciwko to wlasciwie klasa jest juz gotowa.