compus
Conectarea la baza de date pentru ambele opțiuni:
Rețineți că aceste obiecte / resurse de conectare vor fi considerate în continuare deja existente.
Suport API
Atât PDO, cât și MySQLi oferă un API orientat pe obiecte, dar MySQLi oferă de asemenea o abordare procedurală - ceea ce face mai ușor pentru începători să înțeleagă. Dacă sunteți familiarizat cu driverul nativ PHP pentru MySQL, puteți naviga cu ușurință la interfața procedurală MySQLi. Pe de altă parte, odată ce stăpânești DOP, îl poți folosi cu orice bază de date dată așa cum dorești.
Suport pentru baze de date
Principalul avantaj al PDO asupra MySQLi este sprijinirea diferiților șoferi. În momentul acestei scrieri, DOP sprijină 12 șoferi diferiți. spre deosebire de MySQLi, care acceptă numai MySQL.
Pentru a afișa toate driverele PDO acceptate, utilizați următorul cod:
Ce înseamnă asta? În situațiile în care în proiectul dvs. decideți să schimbați baza de date, cu DOP acest proces va fi destul de transparent. Deci, tot ce trebuie să faceți. aceasta este pentru a schimba șirul de conectare și mai multe interogări dacă utilizează metode care nu sunt acceptate de noua dvs. bază de date. Cu MySQLi, trebuie să rescrieți fiecare linie de cod - inclusiv cererile.
Parametrii numiți
Aceasta este o altă oportunitate importantă în cadrul DOP; parametrii de legare sunt mult mai convenabili. decât să folosiți numerotarea:
dar acum comparam cu abordarea MySQLi:
Parametrii obligatori pe o întrebare cunoscută pot și ar putea fi mai scurți, dar sunt la fel de flexibili ca parametrii numiți, deoarece dezvoltatorul ar trebui să păstreze întotdeauna ordinea parametrilor în minte.
Din păcate, MySQLi nu acceptă parametrii numiți.
Maparea către un obiect
Atât PDO, cât și MySQLi pot afișa rezultatele interogării pentru obiecte. Este destul de frumos dacă nu doriți să utilizați un nivel suplimentar de abstractizare a bazei de date, dar se pare că este vorba de comportamentul ORM. Imaginați-vă că avem o clasă de utilizatori cu câteva proprietăți care se potrivesc cu numele câmpurilor din baza de date.
Fără utilizarea cartografierii unui obiect, vom trebui să populam fiecare câmp (fie manual, fie printr-un constructor) înainte de a putea folosi corect metoda info ().
Acest lucru ne permite să definim proprietățile chiar înainte de crearea obiectului! De exemplu:
siguranță
Ambele biblioteci oferă protecție împotriva injecției SQL, atâta timp cât dezvoltatorii le utilizează corect (ecran, aplică legare parametru și interogări pregătite)
Să presupunem că un atacator încearcă să introducă niște SQL prin intermediul parametrului GET 'username' în interogare.
Dacă nu scăpăm, atunci acesta va fi inserat în interogare așa cum este, ștergând tabelul utilizatorilor. deoarece PDO și mysqli acceptă mai multe solicitări.
După cum puteți vedea, PDO :: quote () nu numai că scapă de șir, dar adaugă și citate. Pe de altă parte, mysqli_real_escape_string () scapă numai de șir, va trebui să adăugați singur citate.
Vă recomand să utilizați întotdeauna expresii pregătite în loc de PDO :: quote () și mysqli_real_escape_string ().
productivitate
Atât PDO cât și MySQLi funcționează destul de repede, MySQLi este ușor mai mare, aproximativ 2,5% pentru interogări nepregătite și aproximativ 6,5% pentru cele pregătite. Deși extensia nativă MySQL este chiar mai rapidă decât cele două. Deci, dacă trebuie să obțineți performanța maximă, atunci puteți să o luați în considerare.
concluzie
În cele din urmă, DOP a câștigat cu ușurință această luptă. Cu ajutorul a douăsprezece drivere de baze de date diferite (18 baze de date diferite!) Și parametrii numiți, putem ignora în liniște o mică pierdere în performanță. În ceea ce privește securitatea, ambele extensii sunt sigure dacă dezvoltatorul le folosește în mod corect.
Deci, dacă mai lucrați cu MySQLi, poate că este timpul să-l schimbați!