Rad sa bazom podataka u Drupal 7 - lekcija 1 - Drupal DB API
Ako ste pisali module za Drupal verziju 6, prelazak na novi Drupal 7 Database API neće vam predstavljati problem. Novi DB API radi na osnovu PHP PDO ekstenzije, što mu omogućava rad sa različitim bazama podataka kao što su MySQL, PostgreSQL, MSSQL, pa čak i Oracle. Što se tiče jednostavnosti, teško je reći, jer je potrebno naviknuti se na novi sintaksis, dok je pisanje SQL upita i dalje intuitivnije.
Evo malo iz zvanične dokumentacije:
Drupal 7 Database API pruža standardni, intuitivan sloj apstrakcije za pristup serveru baze podataka. Ovaj API je dizajniran da što je moguće više sačuva sintaksu i snagu SQL jezika, ali takođe:
- Jednostavno podržava više tipova baza podataka;
- Omogućava programerima kreiranje složenijih funkcija baze podataka, poput transakcija;
- Pruža strukturiran interfejs za dinamičko kreiranje upita;
- Obezbeđuje proveru sigurnosti i druge dobre prakse;
- Omogućava modulima čist interfejs za presretanje i modifikaciju upita sajta;
Glavna dokumentacija za database API je ugrađena direktno u komentare u kodu. Sekcija Handbook je proširena API dokumentacijom kao uvod za autore modula koji žele dobro da razumeju rad sa bazama sa administrativne strane. Handbook možda ne obuhvata sve mogućnosti API-ja.
- Database API je napravljen koristeći koncepte objektno-orijentisanog programiranja i ovaj dokument pretpostavlja makar delimično upoznavanje sa ovom paradigmom. Međutim, većina osnovnih operacija ima funkcionalni izgled, pa programeri mogu birati da koriste funkcionalni stil pisanja koda.
Glavna koncepcija Drupal Database API
Nivo apstrakcije baze podataka (db layer) u Drupalu je napravljen na osnovu PHP PDO biblioteke. PDO pruža ujednačen, objektno-orijentisan API za pristup različitim bazama podataka, ali ne pruža apstrakciju za različite SQL dijalekte koje koriste različiti serverski sistemi.
Drivere
Pošto različite baze zahtevaju različite vrste interakcija, Drupal db sloj zahteva drajvere za svaki tip baze. Drajver se sastoji od serije fajlova smeštenih u includes/database/driver, gde je "driver" jedinstveni ključ za taj drajver. U većini slučajeva, ključ drajvera je naziv baze malim slovima, kao što su "mysql", "pgsql" ili "mycustomdriver".
Svaki drajver sadrži nekoliko klasa izvedenih iz roditeljskih klasa u jezgru sistema. Ove drajverske klase mogu prepisivati bilo koje ponašanje koje je potrebno za pravilnu podršku baze. Imena drajverskih klasa su u obliku roditeljske klase, praćene donjom crtom i nazivom drajvera. Na primer, za MySQL specifična klasa InsertQuery je nazvana InsertQuery_mysql.
Veza sa bazom
Veza je objekat klase DatabaseConnection, koji nasleđuje PDO klasu. Svaka baza kojoj Drupal pristupa ima svoj jedinstveni objekat veze. Ovaj objekat može biti specijalizovan u zavisnosti od drajvera.
Da pristupite objektu veze, koristite:
<?php $conn = Database::getConnection($target, $key); ?>
Za pristup trenutno aktivnoj konekciji:
<?php $conn = Database::getConnection(); ?>
Ovo će vam dati pristup aktivnoj konekciji.
U većini slučajeva nećete imati potrebu da direktno pristupate objektu veze. Umesto toga, proceduralna funkcija će to učiniti za vas. Jedini razlog da direktno zatražite objekat veze je ako pravite složene upite koji uključuju više baza i ne želite da menjate aktivnu konekciju.
Za postavljanje aktivne konekcije, koristite:
<?php db_set_active($key); ?>
Upiti prema bazi
Upit je SQL izraz koji se šalje preko konekcije ka bazi. Drupal DB API podržava šest tipova upita: statičke, dinamičke, insert, update, delete i merge upite. Neki upiti mogu biti napisani kao SQL stringovi umesto kroz objektno-orijentisani konstruktor upita. Objekat upita se odnosi na konstruktor koji omogućava izbor jednog od tipova upita.
Kreiranje upita
Objekat se dobija kao rezultat SELECT upita. To je uvek tip DatabaseStatement ili njegov podklasa. DatabaseStatement je proširena klasa PDOStatement.
Drupal koristi pripremljene izjave za sve upite. Pripremljena izjava je šablon upita u koji se vrednosti ubacuju prilikom izvršenja. Pripremljene izjave su SQL ekvivalent koje se pozivaju sa parametrima. Obično PDO koristi jedno pripremljeno stanje i za svako izvršenje ubacuje trenutne vrednosti u parametre. Ova izjava može biti ponovo korišćena za novi upit. Zapravo, izjava i rezultat su sinonimi, ali tek nakon što se izjava izvrši.
Drupal ne izlaže pripremljenu izjavu direktno. Umesto toga, programer koristi objekat upita za kreiranje upita bez direktnog SQL-a, sa kasnijim izvršavanjem.