Co jest lepsze, MySQL lub MySQLi? I dlaczego? Którego powinienem użyć?MySQL vs MySQLi przy użyciu PHP
Mam na myśli nie tylko pod względem wydajności, ale także innych istotnych funkcji.
Co jest lepsze, MySQL lub MySQLi? I dlaczego? Którego powinienem użyć?MySQL vs MySQLi przy użyciu PHP
Mam na myśli nie tylko pod względem wydajności, ale także innych istotnych funkcji.
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:
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.
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.
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?
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
"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
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.
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
@ troelskn, więc nie jest normalne mysql po prostu lepiej? – Pacerier
@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
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
tak, najlepszą rzeczą jest to, że obsługuje mysqli przygotowane sprawozdanie – jondinham
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
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. –