phpBuddy

PHP und Sex

Was PHP und Sex gemeinsam haben? Beides sollte man niemals ohne ausreichenden Schutz praktizieren! Diese Rubrik gibt wichtige Tipps, wie man PHP gegen Attacken absichert und wie man sichere Scripts programmiert. Pflichtlektüre!

Sie sind hier: Startseite Die MySQLi Erweiterung
Einführung in die MySQLi-Erweiterung von PHP 5 - MySQL vs MySQLi
Beitragsseiten
Einführung in die MySQLi-Erweiterung von PHP 5
MySQL vs MySQLi
Datenbankverbindung
Datensätze auslesen
Datensätze schreiben
Mehrfach-Statements
Fazit und Linkübersicht
Alle Seiten

MySQL vs MySQLi

Werfen wir mal einen Blick auf einige Vorteile von MySQLi gegenüber MySQL.

  • Der OOP Zugriff ist einheitlich, wodurch arbeiten im Team oder an Fremdprojekten vereinfacht wird
  • Größere Geschwindigkeit - Laut Hersteller kann ein vielfaches an Geschwindigkeit erreicht werden.
  • Verbesserte Sicherheit - Für die PHP-MySQL Verbindung wird eine SSH-ähnliche Authentifizierung benutzt
  • Das neue Binärprotokoll von MySQL wird verwendet. Dadurch stehen mehr Funktionen zur Verfügung und die Verarbeitung ist schneller und effizienter
  • Keine Standardverbindung und Prepared Statements erzwingen eine saubere und somit sicherere Programmierung
  • Verbesserte Trace- und Debug-Funktionen
  • Multi-Queries werden unterstützt

Dies sind nur einige der Gründe, die im übrigen sowohl aus dem Internet, der Online Doku aber auch aus PHP 5 Bücher stammen, die einen Umstieg auf MySQLi rechtfertigen. Die MySQLi Erweiterung bietet aber auch wesentlich mehr Funktionen als die "klassische" MySQL Erweiterung. Das erkennt man schon daran, dass für MySQL knapp 50 prozedurale Funktionen zur Verfügung stehen, während die 3 wichtigsten MySQLi Klassen es bereits auf knapp 80 Methoden bringen.
Neben den reinen Fakten, macht MySQLi durch die OOP Schnittstelle aber auch mehr Spaß und wie wir weiter unten noch sehen werden, kann man effektiver und zeitsparender damit arbeiten.

Prozedural oder objektorientiert?

MySQLi wurde entwickelt damit es sich in das objektorientierte Umfeld von PHP 5 einreiht. Die prozeduralen Funktionen wurden aus Gründen der Kompatibilität und eines einfachen Umstiegs für notorische Fortschrittsverweigerer beibehalten. Deswegen ist der OOP Weg dem prozeduralen Weg klar vorzuziehen.

Bevor wir endlich zum Code-Teil kommen, schauen wir uns kurz die Unterschiede zwischen MySQL, MySQLi prozedural und MySQLi objektorientiert an.

Für Umsteiger von MySQL
Der Umstieg ist denkbar einfach, denn alles das sich mehr oder weniger ändert ist, dass aus dem Präfix mysql_ ein mysqli_ wird. Hier einige Beispiele:

// Links der MySQL Befehl, rechts das MySQLi Gegenstueck. Der Pfeil bedeutet "wird zu"
mysql_connect() -> mysqli_connect()
mysql_query() -> mysqli_query()
mysql_fetch_array() -> mysqli_fetch_array()
// und so weiter

Die Methoden beim OOP sind (meistens) ebenso eindeutig. So wird aus dem Präfix mysqli_ der Objektname mit dem -> Operator. Beispiel:

// Angenommen unser Objekt traegt den Name $objekt dann sehen die Methoden wie folgt aus
mysqli_query() -> $objekt->query()
mysqli_fetch_array() -> $objekt->fetch_array()
// und so weiter

Nichts desto Trotz gibt es aber einige Besonderheiten bzw Unterschiede bei der prozeduralen und OOP Schreibweise. Einige prozedurale Funktionen haben nämlich keine OOP Methode, sondern stehen beim OOP als Eigenschaft zu Verfügung! Schauen wir uns das mal an...

MySQLi Unterschiede der prozeduralen und OOP Schreibweise
Funktionen die einen Zähl-Wert zurück liefern stehen beim OOP als Eigenschaft zur Verfügung. Das sieht wie folgt aus:

// Liefert die Anzahl der gefundenen Datensaetze
mysqli_num_rows() -> $objekt->num_rows
 
// Liefert die Anzahl der betroffenen Datensaetze
mysqli_affected_rows() -> $objekt->affected_rows

Dem affected_rows fällt eine besondere Rolle zu. So kann man es bei MySQLi jetzt auch als Ersatz für num_rows verwenden. Benutzt man in einem Query INSERT, UPDATE, REPLACE oder DELETE, liefert affected_rows die Anzahl der betroffenen Datensätze. Benutzt man in einem Query SELECT, liefert affected_rows die Anzahl der gefundenen Datensätze.

Insgesamt sind die Funktions-/Methodennamen bei MySQLi so gewählt, dass jeder halbwegs erfahrene PHP Programmierer problemlos umsteigen kann, da sich die Namen an die altbekannten MySQL Funktionen anlehnen. Es kamen aber auch neue Funktionen hinzu, von denen wir uns im weiteren Verlauf des Tutorial einige anschauen wollen.