MySQL vs MySQLi podczas korzystania z PHP [zamknięte]

167

Co jest lepsze, MySQL czy MySQLi? I dlaczego? Którego powinienem użyć?

Mam na myśli lepsze nie tylko pod względem wydajności, ale wszelkich innych istotnych funkcji.

anand.trex
źródło

Odpowiedzi:

111

Jeśli spojrzysz na Ulepszony przegląd rozszerzeń MySQL , powinien on powiedzieć wszystko, co musisz wiedzieć o różnicach między nimi.

Główne przydatne funkcje to:

  • interfejs zorientowany obiektowo
  • obsługa przygotowanych wypowiedzi
  • obsługa wielu instrukcji
  • obsługa transakcji
  • ulepszone możliwości debugowania
  • obsługa serwera wbudowanego.
Mark Davidson
źródło
1
tak, najlepsze jest to, że mysqli obsługuje przygotowane zestawienia
jondinham,
7
Należy również zauważyć, że MySQLi działa tylko z MySQL 5+. To już nie ma znaczenia, ale kiedy pojawił się MySQLi, MySQL 4 nadal był standardem. Jest to jeden z powodów, dla których rozszerzenia są oddzielne, a stary sterownik MySQL pozostaje tam ze względu na kompatybilność.
zneak
6
Warto zauważyć, że w ciągu sześciu lat wiele się zmieniło. mysql_*()jest obecnie przestarzały i wkrótce zostanie usunięty . Nie powinieneś go używać do nowego kodu.
Który powinniśmy wybrać przy mniejszej ilości procesora i pamięci RAM?
Mahdi Jazini,
1
Zobacz odpowiedź Gordona poniżej. Stare rozszerzenie mysql nie jest już obsługiwane, więc i tak będziesz lepiej korzystać z rozszerzenia mysqli.
Mark Davidson,
70

Istnieje strona podręcznika poświęcona pomocy przy wyborze między mysql, mysqli i PDO pod adresem

Zespół PHP zaleca mysqli lub PDO_MySQL do nowego rozwoju:

Zalecane jest użycie rozszerzeń mysqli lub PDO_MySQL. Nie zaleca się używania starego rozszerzenia mysql do nowych programów. Poniżej przedstawiono szczegółową macierz porównawczą funkcji. Uważa się, że ogólna wydajność wszystkich trzech rozszerzeń jest mniej więcej taka sama. Chociaż wydajność rozszerzenia stanowi tylko ułamek całkowitego czasu wykonywania żądania internetowego PHP. Często wpływ ten wynosi zaledwie 0,1%.

Strona zawiera również zestawienie funkcji porównujące 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 macierz funkcji porównująca biblioteki (nowe mysqlnd i libmysql) w

i bardzo dokładny artykuł na blogu pod adresem

Gordon
źródło
15

Porzuciłem używanie mysqli. Jest po prostu zbyt niestabilny. Miałem zapytania, które powodowały awarię PHP przy użyciu mysqli, ale działały dobrze z pakietem mysql. Również mysqli ulega awarii w kolumnach LONGTEXT . Ten błąd był zgłaszany w różnych formach od co najmniej 2005 roku i pozostaje uszkodzony . Szczerze chciałbym używać przygotowanych instrukcji, ale mysqli po prostu nie jest wystarczająco wiarygodne (i nikt nie ma ochoty go naprawiać). Jeśli naprawdę chcesz przygotowanych wyciągów, idź z PDO.

cletus
źródło
2
PDO też nie jest do końca idealne (natknąłem się z nim na kilka paskudnych rdzeni), ale przynajmniej ma szerszą bazę użytkowników, więc prawdopodobnie jest to bezpieczniejszy zakład.
troelskn
@troelskn, więc czy normalny mysql nie jest po prostu lepszy?
Pacerier,
@Pacerier Biorąc pod uwagę, że jest przestarzały, powiedziałbym, że nie. Ogólnie wydaje się, że ChNP stały się standardowym wyborem.
troelskn
@troelskn, ale przestarzały nie oznacza nic poza tym, że nie będzie go w przyszłych wersjach. Pod względem stabilności, czy normalny mysql nie jest bardziej stabilny?
Pacerier,
1
W tym momencie (5.5) PHP będzie aktywnie generować
troelskn.
13

MySQLi oznacza ulepszony MySQL. Jest to zorientowany obiektowo interfejs do powiązań MySQL, który ułatwia korzystanie z rzeczy. Oferuje również obsługę przygotowanych zestawień (które są bardzo przydatne). Jeśli korzystasz z PHP 5, użyj MySQLi.

Ross
źródło
5

Lepsze jest PDO; jest to mniej okrutny interfejs, a także zapewnia te same funkcje, co MySQLi.

Korzystanie z 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ę obiegów.

MarkR
źródło
3

dla mnie gotowe zestawienia to pozycja obowiązkowa. dokładniej, wiązanie parametrów (które działa tylko na przygotowanych instrukcjach). jest to jedyny naprawdę rozsądny sposób wstawiania ciągów znaków do poleceń SQL. naprawdę nie ufam funkcjom „ucieczki”. połączenie DB jest protokołem binarnym, po co używać podprotokołu z ograniczeniami ASCII dla parametrów?

Javier
źródło
1
PDO zwykle używa instrukcji przygotowanych po stronie klienta, więc tak naprawdę nie są one przygotowywane na serwerze - ale to jest dobre, ponieważ oszczędza zasoby serwera i zwykle działa lepiej. Przygotowana instrukcja „emulacja” zawsze będzie wymykać się rzeczom poprawnie.
MarkR
1
„zawsze” i „ucieczka” to niebezpieczne słowa, gdy występują razem. nie wiem, może ten kod jest całkowicie wolny od błędów; ale po co zawracać sobie głowę, skoro dostępny jest prawdziwy protokół binarny? jeśli chodzi o wydajność, to jest otwarte na testy porównawcze.
Javier