Cerere simplă bazată pe clasa PHP

Deși este de obicei recomandabil să se utilizeze un cadru sau un CMS, uneori un proiect este suficient de mic, astfel încât aceste opțiuni ar putea afecta dezvoltarea. Cu toate acestea, chiar și în cazul proiectelor mai mici, separarea elementelor de prezentare de interogările din backend nu ar trebui ignorată. Acest tutorial vă va ajuta să creați un motor de interogare bazat pe clasă pentru PHP și MySQL.


Pasul 1. Configurați Proiectul

Primul lucru pe care dorim să-l facem este să facem niște fișiere și directoare specifice. Iată cum îmi place să configurez proiectele mele. Puteți, desigur, să vă simțiți liberi să schimbați numele și structura după preferințele dvs. Doar asigurați-vă că schimbați cerințele mai târziu, de asemenea.

Faceți directoare

Avem nevoie de un nou director pentru a ține totul. În acest caz, l-am sunat tt. În interiorul meu, am pus fișierele mele de configurare într-un director numit conf. Apoi, o voi face inc (pentru a include) și a pune un director "clasă" în interiorul acestuia.

Adăugați fișiere

Apoi, înăuntru / conf, vom face config.php. Interior / Inc / clasa vom face DAL.php. În cele din urmă, în directorul rădăcină, vom face index.php.

DAL înseamnă "Datele accesului la date" sau "Datele de acces la date".

În arhitectura pe mai multe nivele, aceasta este utilizată în esență pentru a traduce rezultatele interogării bazei de date în obiecte și invers.


Pasul 2. Configurarea bazei de date

Trebuie să realizăm o bază de date și să o ocupăm cu unele date. În scopul acestui tutorial, acesta va fi doar o bază de date cu două tabele, cu o singură relație unul la mai multe. Acest lucru este doar pentru a ne arăta motorul nostru de interogare care acoperă cel puțin o relație.

Creați tabele

Deci, într-o bază de date numită "tut", să facem un tabel numit mărci și o masă numită modele. mărci tabelul va avea câmpuri "id" și "name" și modele tabelul va avea câmpuri "id", "make" și "name".

Adăugați unele date

Acum putem adăuga câteva mărci (cum ar fi Ford, Chevy etc.) ca date din tabelul de mărci și unele modele pe care acești producători sunt responsabili pentru.

Acest tutorial presupune că aveți câteva cunoștințe de lucru despre bazele de date și SQL, deci nu voi intra în detalii despre setarea relației / cheii externe.


Pasul 3. Conexiunea bazei de date

De obicei, nu-mi place să lucrez cu constantele prime din PHP. De obicei, voi defini o grămadă de lucruri și apoi voi face anumite funcții pentru a le introduce în acele constante. Pentru acest exemplu, hai să păstrăm lucrurile simple și să folosim constantele.

Definiți variabilele de conectare

În a noastră /conf/config.php fișier, să configuram variabilele de conectare ale bazei de date. În timp ce suntem la el, să aruncăm o includere în scriptul nostru DAL.php.

 

Această configurație presupune că rulați MySQL pe portul implicit.

Creați funcția de conectare

Acum, înăuntru /inc/class/DAL.php, vom face o funcție pe care o vom folosi pentru a ne conecta la baza noastră de date.

Conexiunea, precum și toate interogările viitoare, vor trăi într-o clasă numită DAL. Înfășurarea implicării tuturor bazelor de date într-o singură clasă ne permite să manipulăm mai târziu întrebările fără a fi nevoie să atingem scripturi de afaceri sau de prezentare. De asemenea, aceasta oferă un anumit grad de machete de nume.

În cazul acestei clase, vom adăuga un constructor chiar dacă nu trebuie să facă nimic.

 Nu s-a putut conecta la serverul MySQL "); mysql_select_db (DB_DB, $ conn) sau mor ("
Nu am putut selecta baza de date indicată "); returnați $ conn;?>

Observați că domeniul de aplicare al directivei dbconnect metoda este privată. Acest lucru se datorează faptului că nu trebuie să ne conectăm la baza de date din afara DAL. În schimb, vom avea metode publice de interogare care vor apela dbconnect din interiorul DAL. Un pic confuz? Nu vă faceți griji, citiți mai departe.


Pasul 4. Creați instrumentele Generale de interogare

Pentru a rezuma interogările noastre pentru a reutiliza codurile scurte, vom avea nevoie de două lucruri. În primul rând, vom avea nevoie de un fel de "rezultat generic de interogare". În al doilea rând, vom avea nevoie de o metodă generică de interogare în DAL.

Creați clasa generică a rezultatelor interogărilor

Scopul acestui lucru este de a putea converti interogările SQL în obiecte și de a minimiza utilizarea urâtului în timp ce ($ row = mysql_fetch_array ($ result)) buclă. Obiectele sunt mult mai ușor de utilizat și ne permit să folosim proprietăți în locul tastelor de matrice.

Pe scurt, vrem să facem o clasă care să creeze nume de proprietăți în zbor și să stocheze date asociate acelor proprietăți.

Vom pune această clasă în interiorul nostru /inc/class/DAL.php script-ul. Deoarece este o clasă nouă, va fi în afara clasei DAL.

 clasa DALQueryResult private $ _results = array (); funcția publică __construct ()  funcția publică __set ($ var, $ val) $ aceasta -> _ rezultatele [$ var] = $ val;  funcția publică __get ($ var) if (isset ($ this -> _ rezultatele [$ var])) return $ this -> _ rezultatele [$ var];  altceva return null; 

Creați o metodă de interogare generică

Acum, în interiorul nostru DAL clasa, trebuie să facem o metodă generală de interogare care se va întoarce SELECTAȚI interogări în DALQueryResult obiecte.

Practic, vrem să transformăm fiecare nume de domeniu returnat într - o proprietate a DALQueryResult obiect.

 cererea funcției private ($ sql) $ this-> dbconnect (); $ res = mysql_query ($ sql); dacă ($ res) if (strpos ($ sql, 'SELECT') === false) return true;  altceva if (strpos ($ sql, 'SELECT') === false) return false;  altceva return null;  $ rezultatele = array (); în timp ce ($ row = mysql_fetch_array ($ res)) $ result = new DALQueryResult (); foreach ($ rând ca $ k => $ v) $ rezultat -> $ k = $ v;  $ results [] = $ rezultat;  returnează rezultatele $; 

Aici este o funcție privată care acceptă o interogare SQL. Se conectează la baza de date și execută interogarea. Apoi, verifică dacă există rezultate. Dacă nu există rezultate, se întoarce nul la a SELECTAȚI interogare, false pe alte interogări. Dacă interogarea a avut succes și interogarea nu a fost SELECTAȚI interogare, aceasta va reveni la adevărat. Dacă a fost a SELECTAȚI, apoi convertește rezultatele într-o serie de obiecte DALQueryResult. Acest lucru imită rezultatele pe care le-ar obține în mod normal dintr-un mysql_query.


Pasul 5. Scrieți o întrebare specifică

Acum suntem gata să scriem o interogare SQL. Interogările DAL ar trebui să fie foarte specifice atât în ​​nume, cât și în scop. Să facem una care să găsească toate modelele unei mărci date.

Aceasta va fi prima noastră metodă publică.

 funcția publică get_models_by_make_name ($ name) $ sql = "SELECT models.id ca id, models.name ca nume, make.name ca face FROM modelele INNER JOIN face pe modele.make = makes.id WHERE make.name = '$ Nume'"; returnați $ this-> query ($ sql); 

Aici scriem interogarea și returnăm rezultatul sub formă de obiecte DALQueryResult. Genericul nostru întrebare metoda se ocupă de iterații și de luarea deciziilor.

DAL finalizat

În acest moment, a noastră DAL.php script-ul este terminat. Ar trebui să arate cum urmează.

 rezultate [$ var] = $ val;  funcția publică __get ($ var) if (isset ($ this -> _ rezultatele [$ var])) return $ this -> _ rezultatele [$ var];  altceva return null;  clasa DAL funcția publică __construct ()  funcția publică get_models_by_make_name ($ name) $ sql = "SELECT modele.id ca id, models.name ca nume, make.name ca make FROM modele INNER JOIN face modele ON .make = make.id WHERE face.name = '$ nume' "; returnați $ this-> query ($ sql);  funcția privată dbconnect () $ conn = mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) sau mor ("
Nu s-a putut conecta la serverul MySQL "); mysql_select_db (DB_DB, $ conn) sau mor ("
($ Sql) $ this-> dbconnect (); $ res = mysql_query ($ sql); dacă ($ res) if (strpos ($ nu se poate selecta baza de date indicată " sql, 'SELECT') === false) return true; altceva if (strpos ($ sql, 'SELECT') === false) return false; array ($ row = mysql_fetch_array ($ res)) $ result = new DALQueryResult (); foreach ($ row ca $ k => $ v) $ rezultat -> $ k = $ v; [] = $ rezultat; returnează rezultatele $;?>

Pasul 6. Folosiți DAL

Acum, să ne îndreptăm în sfârșit spre noi /index.php script și afișați rezultatele utilizând DAL. Tot ce trebuie să facem este să includem pe noi /conf/config.php fișier, instanțiați DAL și faceți ceva cu datele. Iată un exemplu.

 get_models_by_make_name ($ make); ecou "

Modele de $ make

"; // verificați dacă s-au înregistrat rezultate ($ results) echo"
    "; // se trece prin rezultatele foreach ($ rezultatele ca $ model) ecou"
  • $ model-> face $ model-> nume (ID-ul bazei de date: $ model-> id)
  • "; echo"
"; altceva // Afișați un mesaj referitor la lipsa de ecou de date"

Ne pare rău, nu avem informații cu privire la acel producător.

";?>

După cum puteți vedea, acum avem rezultate pe care le putem numi nume de câmp ca proprietăți ale unui obiect PHP.


Pasul 7. Luând lucrurile un pas mai departe

Adesea, va fi util să convertiți genericul DALQueryResult într-un obiect mai specific. În acest caz, puteți scrie obiecte de afaceri care acceptă a DALQueryResult ca parametru constructor. Apoi, folosiți doar pentru a construi noul obiect.

Iată un exemplu

 _id = $ rezultat-> id; $ this -> _ make = $ rezultat-> face; $ this -> _ nume = $ rezultat-> nume;  funcția publică __get ($ var) comutare ($ var) caz 'id': return $ this -> _ id; pauză; cazul 'make': return $ this -> _ make; pauză; caz 'nume': retur $ this -> _ name; pauză; implicit: return null; pauză;  funcția publică __toString () return $ this -> _ name; ?>

Apoi, scrieți doar o interogare pentru a returna o matrice din aceste obiecte în locul unei serii generice DALQueryResult obiecte.

Amintiți-vă, întotdeauna denumiți-vă cu exactitate întrebările.

 funcția publică get_models_by_make_name_as_CarModel ($ name) // Reutilizarea interogării existente $ results = $ this-> get_models_by_make_name ($ sql); // verifica dacă rezultatele (! $) return $ results;  altfel // array pentru a ține obiectele CarModel $ object_results = array (); // creează și convertește la obiecte CarModel foreach (rezultate $ ca $ rezultatul) object_results [] = nou CarModel ($ result);  // array retur de obiecte CarModel returnează object_results; 

Obiectele specifice construcției pot deveni foarte utile atunci când sunt necesare calcule pentru a extrage date semnificative din câmpuri.


Sper că v-ați bucurat de tutorial! Mult noroc.

Cod