MySQL Vs. MySQLi z PHP
Obiektowa struktura
MySQLi udostępnia zestaw funkcji dla struktury kodu ze stylem proceduralnym, aby ułatwić przejście MySQL. Zapewnia jednak także funkcjonalność dzięki zestawowi klas obiektowych. Zastosowanie stylu obiektowego może sprawić, że integracja MySQL będzie lepiej dopasowana do obiektowych funkcji PHP w wersji 5 i często eliminuje potrzebę tworzenia dodatkowych zmiennych do obsługi operacji i zadań MySQL. Na przykład poniżej przedstawiono kod służący do łączenia się z serwerem bazy danych i otwierania bazy danych w MySQL oraz w MySQLi: MySQL: $ dbc = mysql_connect ("localhost", "user", "password"); $ db = mysql_select_database ("baza danych");
MySQLi: $ db = new mysqli ("localhost", "user", "password", "database");
Przygotowane instrukcje
Być może największą różnicą między MySQL i MySQLi jest wsparcie tych drugich dla przygotowanych instrukcji. Z MySQL powinieneś szczególnie uważać, aby użyć instrukcji escape w każdym ciągu znaków użytym w zapytaniu, aby zapobiec atakom SQL injection. Za pomocą MySQLi i przygotowanych instrukcji możesz łączyć zestawy parametrów z zapytaniem i dopasowywać je do różnych wartości, które chcesz zastosować w zapytaniu. MySQLi jest odpowiedzialny za zapewnienie, że instrukcja escape jest używana we wszystkich kodach zanim zostanie zastosowana w bazie danych. Na przykład poniższy kod wstawia dwa rekordy do tabeli MySQL przy użyciu MySQLi:
$ stmt = $ db-> prepare ("INSERT INTO LUDZIE (FullName, Email) wartości (?, ?); $ stmt-> bind_param (" ss ", $ pełna nazwa, $ email); $ fullname =" John Johnson "; $ email = "[email protected]"; $ stmt-> execute (); $ fullname = "Mary Johnson"; $ email = "[email protected]"; $ stmt-> execute (); $ stmt-> close ();
Ulepszenia wydajności
Dzięki przygotowanym instrukcjom i innym usprawnieniom wydajności rozszerzenie MySQL powinno działać szybciej niż równoważne instrukcje MySQL. Jak widać w poprzednim przykładzie za pomocą przygotowanych instrukcji, przeciążenie wkładki jest wymagane tylko raz, gdy instrukcja jest przygotowana. Z odpowiednikiem instrukcji insert w MySQL, przeciążenie insertowe musiałoby zostać powtórzone z każdym zapytaniem do bazy danych.
Transakcje
MySQLi zapewnia dodatkową funkcjonalność w postaci transakcji. Z rozszerzeniem MySQLi można pogrupować zestaw operacji danych w transakcji i wykonać operacje razem jako pojedyncza transakcja. Jeśli operacja transakcji nie powiedzie się, cała operacja zakończy się niepowodzeniem i wszystkie zmiany, które zostały wprowadzone, zostaną odwrócone. Na przykład możesz użyć transakcji podczas planowania przelewu pieniężnego między dwoma kontami, ponieważ jeśli obie strony operacji się nie powiodą, operacja się nie powiedzie i nie chcesz opuścić stanu, w którym konto zostało obciążone ale drugi nie był akredytowany.