Die Veröffentlichung von PHP Version 5 enthalten eine neue Erweiterung für den Zugriff auf MySQL-Datenbanken genannt MySQL Improved oder MySQLi . MySQLi bietet eine verbesserte Leistung, eine objektorientierte Struktur , Unterstützung für vorbereitete Anweisungen und zusätzliche Funktionalität in Form von Datenbank-Transaktionen . Die aktuelle MySQL-Erweiterung wird nicht verbessert werden, zum Beispiel zu Unicode-Unterstützung bieten , und wird schließlich aus beginnend mit PHP Version 6 auslaufen. Object-Oriented Structure
MySQLi bietet eine Reihe von Funktionen für einen prozeduralen Stil Code-Struktur , um den Übergang von MySQL zu erleichtern. Doch es bietet auch Funktionalität durch eine Reihe von objektorientierten Klassen . Mit einem objektorientierten Stil können die MySQL -Integration passen besser mit PHP Version 5 objektorientierte Features und oft beseitigt die Notwendigkeit, zusätzliche Variablen zu erstellen MySQL Operationen und Aufgaben zu unterstützen. Zum Beispiel zeigt der folgende Code die Verbindung zu einer Datenbank -Server zu verbinden und öffnen Sie eine Datenbank in MySQL und MySQLi : MySQL : $ db = mysql_connect ( "localhost" , "user" , "password" ); $ db = mysql_select_database ( " Datenbank ");
mySQLi : $ db = new mysqli ( "localhost" , "user", "password ", " Datenbank ");
Prepared Statements
Vielleicht der größte Unterschied zwischen MySQL und MySQLi ist MySQLi Unterstützung für Prepared Statements . Mit MySQL , müssen Sie besonders darauf achten , jeden String in einer Abfrage verwendet, um SQL -Injection-Angriffe verhindern zu entkommen. Mit MySQLi und Prepared Statements , binden Sie einen Satz von Parametern zu einer Abfrage und die Parameter gleich der verschiedenen Werte, die Sie in der Abfrage verwenden . MySQLi übernimmt dafür sorgen, dass der gesamte Code richtig maskiert , bevor sie in die Datenbank angelegt wird. Zum Beispiel der folgende Code fügt zwei recrods in einer MySQL-Tabelle mit MySQLi :
$ stmt = $ db- > prepare ( "INSERT INTO PEOPLE ( FullName , Email) Werte (,) ; $ ? stmt -> bind_param ( "ss ", $ Name , $ email ); $ Name = " John Johnson" , $ email = " [email protected] "; $ stmt -> execute () ; $ Name = " Mary Johnson" , $ email = " [email protected] "; $ stmt -> execute () ; $ stmt - > close ();
Efficiency Verbesserungen
Wegen Prepared Statements und andere Effizienzsteigerungen , die MySQLi Verlängerung sollte schneller als vergleichbare MySQL -Anweisungen auszuführen. Wie Sie aus dem vorherigen Beispiel mit Prepared Statements sehen, ist der Overhead eines Einsatzes nur erforderlich, einmal , wenn die Anweisung vorbereitet wird . mit einem äquivalenten MySQL -Einsatz, würde der Aufwand des Einsatzes mit jedem Einsatz Abfrage an die Datenbank wiederholt werden.
Transaktionen
MySQLi bietet zusätzliche Funktionalität in Form von Transaktionen. Mit der mysqli-Erweiterung können Sie eine Reihe von Daten Operationen bündeln in einer Transaktion und führen die Operationen zusammen in einer einzigen Transaktion . Sollte ein Betrieb in der Transaktion fehl, kann der gesamte Betrieb und nicht jeder Änderungen , die gemacht wurden sind zurück . gerollt zum Beispiel könnten Sie eine Transaktion bei der Programmierung einer Übertragung von Geld zwischen zwei Konten , weil, wenn beide Seiten der Betrieb erfolgreich zu sein, ist der Betrieb nicht zu einem Erfolg , und Sie wollen nicht lassen einen Zustand, wo ein Konto belastet worden , aber die andere Konto nicht gutgeschrieben worden.