Jdatabase - strat de baze de date abstracte

informații generale

Grupa clase de baze de date este un nivel abstract al bazei de date, care simplifică foarte mult durata de viață a dezvoltator atunci când se lucrează cu baze de date, și este o componentă atât Joomla! CMS și Joomla! Cadru. Acest nivel permite utilizarea diferitelor tipuri de baze de date SQL și de a lucra în diferite medii cu diferite prefix de masă. Special Query Builder simplifică și îmbunătățește lizibilitatea de codificare SQL. Utilizarea stratului de bază de date asigură o compatibilitate maximă și flexibilitate atunci când în curs de dezvoltare extensii.

Grupul CMS clase JDatabase situate în / biblioteci / joomla / bază de date. La dezvoltarea Extensiile, avem de multe ori pentru a face cu o JDatabaseDriver clasă abstractă. Mai jos este diagrama de moștenire:

Pentru a începe lucrul cu baza de date, avem nevoie pentru a obține clasa JDatabaseDriver obiect:

ca aceasta provocare poti folosi in dezvoltarea unei componente în modelul:

interogarea

Când compilați SQL-interogări pot fi utilizate două moduri: un șir de caractere sau un obiect-orientat.

interogări string

Aici este un șir de interogare simplu:

Aceasta este o sintaxa SQL obișnuită.

Vă rugăm să rețineți că în elementul inline #_ este utilizat ca un tabel prefix. La instalarea substituentul se înlocuiește cu un tabel de prefix reală.

Query Builder JDatabaseQuery

clasa JDatabaseQuery vă permite să creați interogări într-un mod orientat pe obiect. Aici este interogarea:

Putem folosi, de asemenea, lanțul de metode:

campanie orientată spre obiect este de preferat atunci când în curs de dezvoltare extensii. Avantajele sale - este de lizibilitate și flexibilitate.

Instalarea și rularea interogări

Pentru a instala metoda SQL-interogare setQuery utilizat (interogare $, $ compensate = 0, $ limita = 0):

  • $ Query - direct SQL-interogare
  • $ Offset - cu o selecție de înregistrare de start
  • $ Limit - cât de multe înregistrări pentru a alege

De exemplu, vrem să stabilească un eșantion de zece intrări și începe selectarea celei de a cincea înregistrare:

Solicitare instalat, dar cum se face? În JDatabaseDriver pentru aceasta există mai multe metode care pot fi împărțite în două grupe:

  • interogare de execuție fără a obține rezultate. De obicei, folosite cu INSERT. UPDATE. DELETE.
  • interoghează pentru a obține rezultate. De obicei, este utilizat împreună cu SELECT.

Pentru a îndeplini cererea, fără a obține rezultate folosind doar o metodă de a executa (). Acesta îndeplinește ultimul set prin metoda setQuery () suna:

În Joomla 2.5 în locul metodei execute (), ar trebui să utilizați metoda de interogare ().

Pentru a efectua o interogare pentru a obține rezultate utilizând un număr de metode diferite. Utilizarea lor depinde de ce fel de anchetă am stabilit și ce rezultate ne dorim. De exemplu, cel mai popular loadObjectList metoda () returnează un tablou de obiecte:

Pentru a reduce scrierea de cod, putem folosi metode de coarde:

Screening-ul de rânduri și de date de intrare

Înainte de a utiliza șirul de interogare în mod obligatoriu ar trebui să fie analizate. Acesta este unul dintre principiile de programare în condiții de siguranță - niciodată încredere în datele de intrare, chiar dacă acestea provin dintr-o interogare anterioară de la sursa de date. Pentru liniile de ecranare, puteți utiliza metodele de evacuare ($ text, $ in plus = false) și citat ($ text, $ evacuare = true).

de evacuare () metoda adaugă o bară oblică în fața caractere nesigure (de obicei, în fața ghilimele simple, dar depinde de motorul de baze de date):

De asemenea, vă permite să activați screening-ul de caractere suplimentare (de exemplu, o subliniere sau un semn la sută). Pentru a face acest lucru, trebuie să treacă un al doilea parametru adevărat:

În acest caz, semnul sută este perceput ca un element șir de caractere, mai degrabă decât ca un wildcard special.

citat () metoda ecranează linie și înfășoară în ghilimele simple:

Cu toate acestea, screening-ul poate fi oprit, pentru că în unele situații este necesar. De exemplu, atunci când se utilizează LIKE condiții. Pentru a face acest lucru, trebuie să treci de-al doilea parametru la false:

Variabila $ titlu este mai întâi cernut folosind metoda de evadare (). în care a doua valoare este setată la true. Prin urmare, alte caractere speciale vor fi, de asemenea, ecranată (în caz contrar s-ar putea rula în probleme serioase de performanță dacă specificați prea multe wildcard speciale). În continuare, rezultatul este transmis metodei citat (). dar, în același timp, scutul off (de evacuare, deoarece a fost deja făcut () metoda):

Din moment ce Joomla 3, citat metoda () are, de asemenea, o serie de rânduri și returnează o matrice de ecranat și învelite în linii ghilimele simple:

Utilizarea quoteName ()

Metoda quoteName (numele $, $ ca = null) necesară pentru utilizarea denumirilor rezervate (cum ar fi: masa, numere, etc.), identificatori (cum ar fi numele de tabele sau nume de câmpuri) sau simboluri speciale. În cazul motoarelor de baze de date diferite, apare în diferite moduri: în MySQL este un singur ghilimele inverse în SQL-Server este paranteze pătrate și în SQL standard este ghilimele:

quoteName () metoda precum citat (), metoda poate lua o matrice:

Al doilea parametru $ ca servește ca clauza AS. care este asociat cu numele $ parametru. Acesta poate fi un șir sau o matrice. În acest ultim caz, lungimea trebuie să se potrivească cu lungimea numelui $:

Pseudonime metode citat () și quoteName ()

Pentru a cita metoda () și quoteName (), există alias-uri:

  • q () poate fi utilizat în locul citat ()
  • qn () poate fi utilizat în locul quoteName ()

Punerea în aplicare a alias-uri este construit pe metoda __call magică (). astfel încât utilizarea lor este controversată. La urma urmei, există o percepție că metodele magice sunt mai lente.

alte metode

getConnectors ()

Returnează o serie de drivere disponibile în prezent.

getInstance (opțiuni $ = array ())

Driverul returnează o instanță cu opțiunile date. Există trei opțiuni la nivel mondial, altele sunt specifice pentru driver-ul de baze de date. Opțiunea „Driver“ determină ce clasa de conducător auto trebuie să fie utilizat pentru a conecta - implicit este „mysqli“. Opțiunea „Baza de date“ specifică ce bază de date de utilizat pentru conexiunea - implicit este „nul“. „Selectați“ opțiune specifică dacă conectorul selectează automat baza de date - în mod implicit „true“.

splitSql ($ sql)

string Split, cu mai multe cereri de la gama de cereri individuale.

Se conecteaza la baza de date.

conectat ()

Returnează true dacă o conexiune la baza de date.

deconectare ()

Metodă pentru conectarea la baza de date.

dropTable ($ masă, ifExists $ = true)

Metoda pentru a elimina tabelul din baza de date, în cazul în care ifExists $ variabila este setată la true. apoi o verificare privind existența mesei.

getAffectedRows ()

Returnează numărul de rânduri care au fost afectate de SQL-interogare anterioară.

getCollation ()

Returnează codificarea bazei de date curente.

getConnection ()

O conexiune la baza de date.

getCount ()

Numărul total de driver de baze de date SQL-interogări finalizate.

getDatabase ()

Returnează numele conexiunii bazei de date curente.

getDateFormat ()

Returnează funcția compatibilă data PHP () pentru driver-ul bazei de date.

getMinimum ()

Returnează versiunea minimă acceptată a bazei de date.

getNullDate ()

Returnează nul sau reprezentare zero a bazei de date pentru șofer marcaj de timp.

getNumRows ()

Returnează numărul de linii care au fost în rezultatul SQL-interogare anterioară.

getPrefix ()

Returnează un prefix de masă pentru driver-ul de baze de date.

getExporter ()

Devine exportator de clasă.

getImporter ()

Devine importatorul de clasă.

getQuery ($ = false nou)

Devine obiectul curent cerere (sau șirul de interogare) sau o nouă cerere de obiect, dacă parametrul este setat la true.

getIterator ($ coloană = null, $ class = '\\ stdClass')

Devine un nou obiect iterator pentru cererea curentă.

getTableColumns ($ tabel, $ typeOnly = true);

Se returnează un tablou asociativ în cazul în care cheia este tipul de câmp în tabel și valorile - date privind tipul câmpului.

getTableCreate (tabele $)

Aceasta arată cererea CREATE. care creează aceste tabele parametru tabel opțiune $.

getTableKeys (tabele $)

Returnează o matrice a tabelului cheie cu caracteristicile lor.

getTableList ()

Se întoarce o matrice cu lista de tabele din baza de date curentă.

hasUTFSupport ()

Acesta determină dacă motorul bazei de date suportă codarea UTF-8.

getVersion ()

Returnează versiunea bazei de date.

insertid ()

Returnează INSERT interogarea valoarea recent introdusă ID rând.

isMinimumVersion ()

Verifică dacă este sau nu versiunea instalată a bazei de date driver-ul bazei de date.

log (nivel de $, $ mesaj, matrice $ context = array ())

lockTable ($ tableName)

Blochează tabelul din baza de date.

replacePrefix ($ sql, $ prefix = '#__')

Înlocuiește un identificator șir string $ prefix conținut în tablePrefix de proprietate de clasă.

renameTable ($ oldTable, $ newTable, $ de backup = null, $ prefix = null)

Redenumește numele tabelului în $ oldTable $ newTable.

selectați (baza de date $)

Selectează o bază de date pentru a utiliza.

setDebug (nivel de $)

Setează starea debugger driverului bazei de date.

setLogger (Log \ LoggerInterface $ logger)

Seturi pentru utilizare conexiune codificarea UTF-8.

truncateTable ($ tabel)

Șterge toate rândurile din tabel. Contorul, care este utilizat pentru înregistrările noi unice la zero.

unlockTables ()

Deblochează tabelele din baza de date.