# Übersicht

Dieser Abschnitt bietet eine Einführung in die Möglichkeiten, die bei der Entwicklung einer PHP-Anwendung, die mit einer MySQL-Datenbank interagieren soll, zur Verfügung stehen.

Was ist eine API?

Eine Schnittstelle zur Programmierung von Anwendungen (Application Programming Interface, API) definiert die Klassen, Methoden, Funktionen und Variablen, die eine Anwendung aufrufen muss, um die gewünschte Aufgabe zu erfüllen. Im Falle von PHP-Anwendungen, die mit Datenbanken kommunizieren müssen, werden die erforderlichen APIs in der Regel über PHP-Erweiterungen bereitgestellt.

APIs können entweder prozedural oder objektorientiert sein. Bei einer prozeduralen API werden Funktionen aufgerufen, um Aufgaben auszuführen, während bei einer objektorientierten API Klassen instanziiert und dann die Methoden der resultierenden Objekte aufgerufen werden. Von den beiden ist die letztere in der Regel die bevorzugte Schnittstelle, da sie moderner ist und zu besser strukturiertem Code führt.

Wenn eine PHP-Anwendung geschrieben wird, die sich mit dem MySQL-Server verbinden muss, stehen mehrere APIs zur Verfügung. In diesem Dokument wird beschrieben, welche Möglichkeiten es gibt und welche die beste Wahl für die jeweilige Anwendung ist.

Was ist ein Konnektor?

Der Begriff Konnektor, wie er in der MySQL-Dokumentation verwendet wird, bezieht sich auf Software, die es ermöglicht, von einer Anwendung aus eine Verbindung zum MySQL-Datenbankserver herzustellen. MySQL bietet Konnektoren für verschiedene Sprachen, darunter PHP.

Wenn eine PHP-Anwendung mit einem Datenbankserver kommunizieren soll, muss PHP-Code geschrieben werden, der die Verbindung zum Datenbankserver, die Abfrage der Datenbank und andere datenbankbezogene Funktionen ermöglicht. Es wird eine Software benötigt, die die API für die Kommunikation zwischen der Anwendung und dem Datenbankserver zur Verfügung stellt und gegebenenfalls andere zwischengeschaltete Bibliotheken verwendet. Diese Software wird allgemein als Konnektor bezeichnet, weil sie es der Anwendung ermöglicht, sich mit einem Datenbankserver zu verbinden.

Was ist ein Treiber?

Ein Treiber ist ein Stück Software, das für die Kommunikation mit einem bestimmten Typ von Datenbankserver entwickelt wurde. Der Treiber kann auch eine Bibliothek aufrufen, z. B. die MySQL Client Library oder den MySQL Native Driver. Diese Bibliotheken implementieren das Low-Level-Protokoll, das für die Kommunikation mit dem MySQL-Datenbankserver verwendet wird.

So verwendet beispielsweise die Datenbankabstraktionsschicht PHP Data Objects (PDO) einen von mehreren datenbankspezifischen Treibern. Einer der verfügbaren Treiber ist der PDO-MYSQL-Treiber, der eine Schnittstelle zum MySQL-Server bietet.

Manchmal werden die Begriffe Konnektor und Treiber synonym verwendet, was verwirrend sein kann. In der MySQL-Dokumentation ist der Begriff "Treiber" für Software reserviert, die den datenbankspezifischen Teil eines Konnektor-Pakets bereitstellt.

Was ist eine Erweiterung?

In der PHP-Dokumentation wird häufig der Begriff Erweiterung verwendet. Der PHP-Code besteht aus einem Kern und optionalen Erweiterungen der Kernfunktionalität. Zu den PHP-Erweiterungen für MySQL gehören mysqli und der PDO-Treiber für MySQL, die mit Hilfe des PHP-Frameworks für Erweiterungen implementiert werden.

Damit die Funktionen einer Erweiterung von PHP-Programmierern programmtechnisch genutzt werden können, stellt diese in der Regel eine API zur Verfügung. Allerdings stellen nicht alle Erweiterungen, die das Framework für PHP-Erweiterungen verwenden, dem PHP-Programmierer eine API zur Verfügung.

Der PDO-Treiber für MySQL beispielsweise stellt dem PHP-Programmierer keine API zur Verfügung, sondern eine Schnittstelle zur darüber liegenden PDO-Schicht.

Die Begriffe API und Erweiterung sollten nicht als gleichbedeutend angesehen werden, da eine Erweiterung dem Programmierer nicht unbedingt eine API zur Verfügung stellt.

Was sind die wichtigsten PHP-APIs, die für die Verwendung von MySQL zur Verfügung stehen?

Wenn eine Verbindung zu einem MySQL-Datenbankserver hergestellt werden soll, gibt es im Wesentlichen zwei Optionen für die API:

- Die PHP-Erweiterung mysqli

- PHP Data Objects (PDO)

Jede hat ihre eigenen Vor- und Nachteile. Die folgende Diskussion soll eine kurze Einführung in die wichtigsten Aspekte der einzelnen APIs geben.

Was ist die PHP-Erweiterung mysqli?

Die Erweiterung `mysqli`, auch bekannt als MySQL improved, wurde entwickelt, um die Vorteile der neuen Funktionen, die in MySQL-Systemen ab Version 4.1.3 zur Verfügung stehen, nutzen zu können. `mysqli` ist in PHP ab Version 5 enthalten.

`mysqli` bietet viele Vorteile, aber die wichtigsten Verbesserungen gegenüber `mysql` sind:

- Objektorientierte Schnittstelle

- Unterstützung für vorbereitete Anweisungen

- Unterstützung für Mehrfachanweisungen

- Unterstützung für Transaktionen

- Verbesserte Debugging-Funktionen

Zusätzlich zur objektorientierten Schnittstelle bietet die Erweiterung auch eine prozedurale Schnittstelle.

Die Erweiterung `mysqli` wird mit Hilfe des PHP-Frameworks für Erweiterungen erstellt; der Quellcode befindet sich im Verzeichnis ext/mysqli.

Weitere Informationen über die Erweiterung `mysqli` sind unter Mysqli zu finden.

Was ist PDO?

PHP Data Objects, oder PDO, ist eine Abstraktionsschicht für Datenbanken speziell für PHP-Anwendungen. PDO bietet eine einheitliche API, die unabhängig von der Art des Datenbankservers ist, mit dem sich die Anwendung verbindet. Wenn die PDO-API verwendet wird, könnte man theoretisch den verwendeten Datenbankserver wechseln, beispielsweise von Firebird zu MySQL, und müsste nur geringfügige Änderungen am PHP-Code vornehmen.

Andere Beispiele für Datenbankabstraktionsschichten sind JDBC für Java-Anwendungen und DBI für Perl.

PDO hat zwar seine Vorteile, z. B. eine klare, einfache und portierbare API, aber sein Hauptnachteil ist, dass es nicht möglich ist, alle verbesserten Features zu nutzen, die in den neuesten Versionen des MySQL-Servers verfügbar sind. Beispielsweise können mit PDO nicht die Mehrfachanweisungen von MySQL genutzt werden.

PDO wird mit Hilfe des PHP-Frameworks für Erweiterungen erstellt; der Quellcode befindet sich im Verzeichnis ext/pdo.

Weitere Informationen über PDO sind unter PDO zu finden.

Was ist der PDO-MYSQL-Treiber?

Der PDO-MYSQL-Treiber ist zumindest aus der Sicht eines PHP-Programmiers keine API im eigentlichen Sinne. Genau genommen befindet sich der PDO-MYSQL-Treiber in der Schicht unter PDO selbst und bietet eine MySQL-spezifische Funktionalität. Der Programmierer ruft zwar die PDO-API auf, aber PDO verwendet den PDO-MYSQL-Treiber, um mit dem MySQL-Server zu kommunizieren.

Der PDO-MYSQL-Treiber ist einer von mehreren verfügbaren PDO-Treibern. Daneben gibt es unter anderem PDO-Treiber für die Datenbankserver Firebird und PostgreSQL.

Der PDO-MYSQL-Treiber wird mit Hilfe des PHP-Frameworks für Erweiterungen erstellt; er stellt dem PHP-Programmierer keine API zur Verfügung. Der Quellcode befindet sich im Verzeichnis ext/pdo_mysql.

Weitere Informationen über den PDO-MYSQL-Treiber sind unter MySQL PDO-Treiber zu finden.

Was ist PHPs MySQL Native Driver?

Um mit dem MySQL-Datenbankserver zu kommunizieren, verwenden `mysqli` und der PDO-MYSQL-Treiber jeweils eine Low-Level-Bibliothek, die das erforderliche Protokoll implementiert. In der Vergangenheit war die einzige verfügbare Bibliothek die MySQL Client Library, auch bekannt als `libmysqlclient`.

Die Schnittstelle von `libmysqlclient` wurde jedoch ursprünglich für C-Anwendungen entwickelt und ist daher nicht für die Kommunikation mit PHP-Anwendungen optimiert. Aus diesem Grund wurde für PHP-Anwendungen der MySQL Native Driver, `mysqlnd`, als Alternative zu `libmysqlclient` entwickelt.

Sowohl die Erweiterung `mysqli` als auch der PDO-Treiber für MySQL können jeweils so konfiguriert werden, dass sie entweder `libmysqlclient` oder `mysqlnd` verwenden. Da `mysqlnd` speziell für die Verwendung im PHP-System entwickelt wurde, verfügt es über zahlreiche Speicher- und Geschwindigkeitsverbesserungen gegenüber `libmysqlclient`. Es wird dringend empfohlen, diese Verbesserungen zu nutzen.

Der MySQL Native Driver wird mit Hilfe des PHP-Frameworks für Erweiterungen erstellt; er stellt dem PHP-Programmierer keine API zur Verfügung. Der Quellcode befindet sich im Verzeichnis ext/mysqlnd.

Vergleich der Merkmale

Die folgende Tabelle vergleicht die Funktionalität der wichtigsten Methoden für den Aufbau einer Verbindung zu MySQL mittels PHP:

Vergleich der MySQL-API-Optionen in PHP
| PHP-Erweiterung mysqli | PDO (mit PDO-Treiber für MySQL und MySQL Native Driver)
--- | --- | ---
PHP-Version der Einführung | 5.0 | 5.0
MySQL-Entwicklungsstatus | In aktiver Entwicklung | In aktiver Entwicklung
API unterstützt Zeichensätze | Ja | Ja
API unterstützt serverseitige vorbereitete Anweisungen | Ja | Ja
API unterstützt clientseitige vorbereitete Anweisungen | Nein | Ja
API unterstützt gespeicherte Prozeduren | Ja | Ja
API unterstützt Mehrfachanweisungen | Ja | Weitestgehend
Unterstützt die gesamte Funktionalität von MySQL 4.1+ | Ja | Weitestgehend

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open