2009-02-14 14 views

Odpowiedz

97

Jeśli spojrzysz na MySQL Improved Extension Overview, powinieneś powiedzieć wszystko, co musisz wiedzieć o różnicach między nimi.

Głównymi przydatne funkcje to:

  • wsparcie zorientowane obiektowo interfejs do sporządzanych sprawozdań
  • wsparcie dla wielu stwierdzeń
  • wsparcia dla transakcji
  • rozszerzone możliwości debugowania
  • obsługa wbudowanego serwera.
+0

tak, najlepszą rzeczą jest to, że obsługuje mysqli przygotowane sprawozdanie – jondinham

+6

Należy również zauważyć, że MySQLi działa tylko z MySQL 5+. Nie jest to już istotne, ale kiedy MySQLi wyszedł, MySQL 4 nadal był standardem. Jest to jeden z powodów, dla których rozszerzenia są oddzielne, stary sterownik MySQL pozostaje tam dla celów kompatybilności. – zneak

+5

Warto zauważyć, że wiele się zmieniło od sześciu lat. 'mysql _ *()' jest teraz przestarzałe i __ będzie wkrótce usunięte__. Nie powinieneś używać go do nowego kodu. –

4

Co jest lepsze to PDO; jest to mniej ofensywny interfejs i zapewnia te same funkcje, co MySQLi.

Stosowanie przygotowanych instrukcji jest dobre, ponieważ eliminuje możliwości wstrzykiwania SQL; używanie instrukcji przygotowanych po stronie serwera jest złe, ponieważ zwiększa liczbę podróży w obie strony.

10

MySQLi to skrót od MySQL. Jest to obiektowy interfejs do powiązań MySQL, który ułatwia korzystanie. Oferuje również wsparcie dla przygotowanych instrukcji (które są przydatne bardzo). Jeśli korzystasz z PHP 5, użyj MySQLi.

3

Dla mnie przygotowane oświadczenia to funkcja obowiązkowa. dokładniej, parametr binding (który działa tylko na przygotowanych wyciągach). to jedyny naprawdę dobry sposób na wstawianie łańcuchów do poleceń SQL. Naprawdę nie ufam funkcjom "ucieczki". połączenie DB jest protokołem binarnym, dlaczego używasz pod-protokołu ograniczonego do ASCII dla parametrów?

+1

PDO zwykle używa instrukcji przygotowanych po stronie klienta, więc nie są one naprawdę przygotowane na serwerze - ale jest to dobre, ponieważ oszczędza zasoby serwera i zwykle działa lepiej. Przygotowana "emulacja" instrukcji zawsze będzie poprawnie wymykała się z rzeczy. – MarkR

+1

"zawsze" i "ucieczka" to niebezpieczne słowa, gdy idą w parze. nie wiem, może ten kod jest całkowicie wolny od błędów; ale po co zawracać sobie głowę, gdy dostępny jest prawdziwy protokół binarny? jeśli chodzi o wydajność, jest to otwarte na testy porównawcze. – Javier

14

Porzuciłem używanie mysqli. Jest po prostu zbyt niestabilna. Miałem zapytania, które powodują awarię PHP przy użyciu mysqli, ale działają dobrze z pakietem mysql. Również mysqli crashes on LONGTEXT columns. Ten błąd został zgłoszony w różnych formach od co najmniej roku 2005 i pozostaje uszkodzony. Szczerze chciałbym użyć przygotowanych oświadczeń, ale mysqli po prostu nie jest wystarczająco wiarygodny (i nikt nie wydaje się kłopotać go naprawianiem). Jeśli naprawdę chcesz przygotować przygotowane oświadczenia z ChNP.

+2

PDO również nie jest dokładnie idealny (użyłem go do kilku paskudnych coredump), ale przynajmniej ma szerszą bazę użytkowników, więc prawdopodobnie jest bezpieczniejszy. – troelskn

+0

@ troelskn, więc nie jest normalne mysql po prostu lepiej? – Pacerier

+0

@Pacerier Biorąc pod uwagę, że jest przestarzałe, powiedziałbym, że nie. Ogólnie wydaje się, że PDO stały się standardowym wyborem. – troelskn

67

Jest to strona poświęcona pomocy w wyborze między mysql, mysqli i PDO w

Zespół PHP zaleca mysqli lub pdo_mysql za rozwój nowych:

Zaleca się użycie mys rozszerzenia qli lub PDO_MySQL. Nie zaleca się używania starego rozszerzenia mysql do nowego programowania. Szczegółowa macierz porównania cech znajduje się poniżej. Ogólna wydajność wszystkich trzech rozszerzeń jest uważana za mniej więcej taką samą. Chociaż wydajność rozszerzenia stanowi tylko ułamek całkowitego czasu działania żądania internetowego PHP.Często wpływ jest tak niski jak 0,1%.

Strona zawiera także macierz funkcji porównującą interfejsy API rozszerzeń. Główne różnice między mysqli i MySQL API są następujące:

       mysqli  mysql 
Development Status    Active  Maintenance only 
Lifecycle      Active  Long Term Deprecation Announced* 
Recommended     Yes  No 
OOP API      Yes  No 
Asynchronous Queries   Yes  No 
Server-Side Prep. Statements Yes  No 
Stored Procedures    Yes  No 
Multiple Statements   Yes  No 
Transactions     Yes  No 
MySQL 5.1+ functionality  Yes  No 

* http://news.php.net/php.internals/53799

Istnieje dodatkowa matryca funkcja porównywania z bibliotek (nowa mysqlnd kontra libmysql) przy

i bardzo dokładny b log artykuł w

Powiązane problemy