PHP bietet verschiedene APIs für die Verbindung zu MySQL. Im Folgenden werden die APIs beschrieben, die von den Erweiterungen mysqli und PDO bereitgestellt werden. In jedem Codeschnipsel wird eine Verbindung zu einem MySQL-Server auf "example.com" mit dem Benutzernamen "user" und dem Passwort "password" hergestellt und es wird eine Abfrage zur Begrüßung des Benutzers ausgeführt.
Beispiel #1 Vergleich der MySQL-APIs
<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);
// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);
Beispiel #2 Vergleich mit vorbereiteten Anweisungen
<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$statement = $mysqli->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$result = $statement->get_result();
$row = $result->fetch_assoc();
echo htmlentities($row['District']);
// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['District']);
Vergleich der Merkmale
Die Leistung der beiden Erweiterungen ist insgesamt gesehen in etwa gleich. Allerdings macht die Leistung der Erweiterungen nur einen Bruchteil der Gesamtlaufzeit einer PHP-Webanforderung aus. Oft liegt der Einfluss bei nur 0,1%.
ext/mysqli | PDO_MySQL | |
---|---|---|
PHP-Version der Einführung | 5.0 | 5.1 |
Enthalten in PHP 7.x und 8.x | Ja | Ja |
Entwicklungsstatus | Aktiv | Aktiv |
Lebenszyklus | Aktiv | Aktiv |
Für neue Projekte empfohlen | Ja | Ja |
OOP-Schnittstelle | Ja | Ja |
Prozedurale Schnittstelle | Ja | Nein |
API unterstützt nicht-blockierende, asynchrone Abfragen mit mysqlnd | Ja | Nein |
Persistente (dauerhafte) Verbindungen | Ja | Ja |
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 |
API unterstützt Transaktionen | Ja | Ja |
Transaktionen können mit SQL gesteuert werden | Ja | Ja |
Unterstützt die gesamte Funktionalität von MySQL 5.1+ | Ja | Weitestgehend |