Considerații privind conectivitatea bazei de date PHP

Scriu o nouă aplicație în PHP care va fi lansată publicului ca aplicație comercială. Până în acest moment, experiența mea a fost cu bazele de date MySQL în PHP.

Utilizatorul final este responsabil pentru furnizarea funcționalității bazei de date, iar aplicația PHP pur și simplu se va conecta la ea și o va folosi.

Întrebarea mea este că, deoarece nu știu ce bază de date va folosi utilizatorul, ce cale să merg pentru a susține acest lucru în PHP?

Întrebările pe care le am sunt:

  • Este ODBC calea corectă? Mă refer la ODBC de mai jos, dar dacă ODBC nu este metoda potrivită de utilizat, aceleași întrebări se aplică pentru oricare dintre metodele sugerate.

  • Pierd orice funcționalitate/caracteristică folosind funcții ODBC față de echivalentele MySQL din PHP?

  • Există ceva legat de securitate de care trebuie să țin cont? De exemplu, am folosit mysql_real_escape_string() în aplicațiile anterioare. Care este echivalentul ODBC (este chiar necesar?)

  • Presupun că PHP se poate conecta la o bază de date MySQL folosind ODBC? MySQL trebuie configurat într-un fel pentru a permite acest lucru?

  • Din punct de vedere al performanței, este ODBC acceptabil?


person psynnott    schedule 08.06.2012    source sursă


Răspunsuri (3)


Pentru asistență și performanță, cea mai bună opțiune ar fi probabil PDO (PHP Database Object). Acesta este de bază pentru PHP și acceptă toate sistemele DB principale, se va ocupa în mod nativ de șirurile de evadare și așa mai departe.

Pentru a rămâne agnostic, nu puteți utiliza numai lucruri MySQL, de ex. Adăugarea LIMIT care nu este acceptată cu toate bazele de date SQL.

Dar acestea fiind spuse, verificați mai întâi. Dacă clientul are o bază de date noSQL sau folosește Amazon cu șiruri de conexiune unice (de exemplu), atunci ai probleme.

person Robbie    schedule 08.06.2012
comment
Cred că DOP va acoperi majoritatea bazelor pentru mine. MySQL, PostgreSQL, Informix, ODBC, Oracle sunt toate acceptate. Am găsit acest tutorial despre PDO util net.tutsplus.com/tutorials/php/ - person psynnott; 08.06.2012

Întrebarea mea este că, deoarece nu știu ce bază de date va folosi utilizatorul, ce cale să merg pentru a susține acest lucru în PHP?

Iată un link pentru utilizarea abstracției bazei de date în PHP.

Scopul unei biblioteci de abstractizare a bazei de date este de a crea uniformitate în comunicarea cu mai multe servere de baze de date. Gândiți-vă la asta astfel, pentru ca aplicația dvs. să accepte mai multe baze de date, ar avea nevoie de linii diferite de cod pentru a îndeplini aceleași funcții pe fiecare. Cu o bibliotecă de abstractizare, aplicația are nevoie doar de un set de cod pentru a comunica cu orice bază de date pe care o acceptă biblioteca. Acest lucru crește drastic numărul de opțiuni de server de baze de date disponibile pentru aplicația dvs. PHP.

http://www.hosting.com/support/programming/using-adodb-to-build-a-database-agnostic-php-application

person Jharwood    schedule 08.06.2012
comment
Vă rugăm să oferiți mai multe explicații și nu doar un link ca răspuns. - person Grigor; 08.06.2012

Probabil că aș standardiza pe DOP; abstractizează un număr bun de baze de date și expune o interfață unificată, este scris în C și majoritatea oamenilor îl vor avea instalat implicit.

Cuvânt de precauție aici; nu toate bazele de date acceptă aceeași gramatică SQL, așa că poate fi necesar să asigurați și pentru asta. Acest lucru este însă dificil, dar o modalitate este de a defini o clasă de ajutor între PDO și clasele tale; această clasă de ajutor ar traduce apelurile logice de afaceri în SQL real. Ai putea oferi unul care funcționează pentru MySQL și să-i lași pe utilizatori să creeze pe celelalte? :)

person Ja͢ck    schedule 08.06.2012
comment
@psynnott da, cred că Doctrine funcționează în jurul acestei probleme... dar sunt sigur că nu este banal :) btw, am adăugat la punctul meu că PDO este scris în C, spre deosebire de ADODB. S-ar putea spune că ADODB este PHP pur și, prin urmare, nu ați avea dependențe, dar PDO vine implicit în multe distribuții :) - person Ja͢ck; 08.06.2012