O clasă php utilă pentru lucrul cu mysql

Recent, am fost interesat să scriu o clasă php pentru a lucra cu baza de date MySQL. Cerințele mele sunt comoditatea formării unei interogări în baza de date și abilitatea de a sorta și scrie date printr-o matrice, ceea ce simplifică lucrul cu baza de date.







Ca urmare, o astfel de clasă a apărut:

Pentru a vă conecta la baza de date (DB), declarați clasa Db și conectați-vă utilizând funcția de conectare la baza de date. Valorile funcției: conectați (gazdă, nume de utilizator, parolă, nume de bază de date);


După conectare, puteți începe să lucrați. Pentru a sorta folosind o matrice, declar un matrice, și pentru a utiliza funcția unde să scriu date, trec matricea la ea:


Apoi, voi descrie funcția mai detaliat. Și acum vom declara din care câmpuri să facem o selecție, pentru aceasta folosim funcția de selectare, în mod implicit valoarea acesteia este * și nu poate fi declarată.


În mod implicit, unde utilizează semnul = pentru comparație, dar dacă aveți nevoie de o altă valoare, de exemplu, mai mult sau mai puțin, puteți trece semnul de comparare la a doua valoare. În funcție, puteți utiliza atât varianta de comparare a șirului, de exemplu "prețul, 1000", cât și matricele ca în exemplul de mai sus, iar semnul trecut va fi înlocuit cu întreaga matrice.


Pentru a sorta valorile în cadrul unei selecții, vom folosi funcția order_by, pentru care vom crea și o matrice:


Această funcție va genera următoarea interogare: ORDER BY price DESC, data ASC. În ORDER BY, puteți înlocui argumentele folosind funcția order_by_text ():


Acum, funcțiile de ieșire a datelor sunt trei: num_rows, multiline, linii:


Funcția num_rows arată numărul de înregistrări care se potrivesc interogării, false - înseamnă că nu este necesar să ștergeți datele declarate pentru sortare. Fără fals, toate datele declarate sunt șterse și trebuie declarate din nou. "Date" - tabelul din baza de date la care facem o interogare.


Funcția multiline afișează matrice de date care corespund interogării.


Funcția de linii emite un prim matrice care se potrivește cu interogarea.

Funcțiile formează următoarea interogare:
SELECT msg, zag FROM date WHERE status = '1' ȘI categorie = '2' ȘI prețul '' 1000 'ORDER DE PRETUL DESC, date ASC, id DESC

Funcția de limită stabilește LIMIT la o interogare, unde 2 este numărul de pornire pentru ieșire (ie ieșirea va începe de la al doilea element corespunzător interogării), 4 este numărul de elemente din matrice.


Selectați, unde și comanda, să vă declarați din nou, deoarece funcția liniilor anterioare nu a fost falsă - înseamnă că toate datele pentru sortare au fost șterse. Formează o astfel de solicitare:

SELECT id id FROM date WHERE status = '1' ȘI categorie = '2' ȘI ID IN (1, 2, 3, 4) COMANDA după preț DESC, date ASC LIMIT 2,4







Aici am folosit o altă funcție where_text - este necesară scrierea interogării însăși în WHERE


Formează o astfel de interogare: SELECT * FROM data WHERE MATCH (test, text) ÎMPOTRIVA ('+ test + search' în modul BOOLEAN). Căutăm în tabelul de date, în câmpurile de testare și text se potrivește cu testul și căutarea cuvintelor.


$ order_by și $ unde sunt luate din variabilele declarate anterior și obțineți următoarea interogare:

SELECT id FROM de date, unde starea = '1' și categoria = '2' ȘI POTRIVIRE (test, text) against ( '+ + test de căutare' IN MOD BOOLEAN) ORDER BY DESC pret, ASC de date

Pentru a scrie în baza de date: folosim setul de funcții - parametrii de transfer al matricei de stocare și inserați - scrieți în baza de date:


Funcția va returna ID-ul de înregistrare la variabila $ id. Interogarea va arăta astfel: INSERT data SET test = 'test', text = 'text'

Pentru a modifica șirul, utilizați funcția de actualizare:


Dacă intrarea a avut succes, mesajul $ va reveni UPDATE OK altfel ERROR UPDATE. Interogarea va fi:

UPDATE testul SET date = 'test', text = 'text', categoria = '2', testul = 'schimbare de test', text = 'schimbare text' unde id = '1'

Și încă o funcție de interogare - în ea puteți scrie complet interogarea dvs. selectată:


De asemenea, puteți realiza o conexiune paralelă cu o altă bază de date:

O astfel de clasă am. Nu o voi compara cu alte clase pentru a lucra cu bazele de date, știu - sunt multe. Eu o public, tk. Cred că poate cineva va veni la îndemână și, de asemenea, vreau critici constructive, care vor contribui la îmbunătățirea acestui cod.

Dacă așa că vreau să scriu ceva de propriile lor de la zero, la început, aș sugera o mică afacere cu materiale: citit de bună practică (DOP sau mysqli cel mai rău caz, o divizie a responsabilității, etc.), citiți despre securitate (toate injecția dumneavoastră preferat, de exemplu) Vedeți implementarea acestui lucru în alte biblioteci ...

Ei bine, ați atacat un om, ați crede că nimeni nu a făcut așa :) Da, toată lumea și-a scris propria lor "clasă pentru MySQL", și uneori nu unul.

Acest PHPshnik este obligat în viață să scrie propriul cadru :)
Deci, este ceva de luptat

Uitând despre PSR și PHPDoc

Sursa este cea mai bună documentație (c)

Scrieți DB - sarcina fiecărui programator

>> Ei bine, ați atacat un om, ați crede că nimeni nu a făcut așa :) Da, toată lumea și-a scris "clasa pentru MySQL", și uneori nu unul.

Toată lumea ar putea scrie, dar nu toate au postat pe Habr ...

Vreau critici constructive, care vor îmbunătăți acest cod
Despre relevanța de a scrie această clasă nu vor vorbi, da doar câteva dintre comentariile lor cu privire la cod:
01) Funcțiile care pot arunca excepții (de exemplu, mysql_connect) ar trebui să fie înfășurate în blocuri de încercare

02) tip de text interogare «SELECT $ this-> selectați din tabelul $ unde $ this-> în cazul în care $ this-> order_by $ this-> limita» - nu aș face acest lucru, pentru că este o amenințare potențială de XSS-atacuri.

03) Mesajele de eroare din html-markup sunt, de asemenea, practici nepotrivite, deoarece nu vi se va cere întotdeauna să afișați erori pe ecran. Este mai bine să plasați textele mesajului în constantele unei clase (IMHO) cu totul.

04) În linia $ db = mysql_connect ("$ host", "$ login_mysql", "$ password_mysql"); nu înțelege destul de ce trebuie să închideți variabilele în ghilimele, fără ei, totul ar trebui să câștige. Deși, poate, nu știu nimic.

02) tip de text interogare «SELECT $ this-> selectați din tabelul $ unde $ this-> în cazul în care $ this-> order_by $ this-> limita» - nu aș face acest lucru, pentru că este o amenințare potențială de XSS-atacuri.
Bună dimineața, trezește-te, nu XSS, ci SQL-Injecție :)

Ora este specificată în fusul orar setat pe dispozitiv.







Articole similare

Trimiteți-le prietenilor: