Auswahl einer API

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/mysqliPDO_MySQL
PHP-Version der Einführung5.05.1
Enthalten in PHP 7.x und 8.xJaJa
EntwicklungsstatusAktivAktiv
LebenszyklusAktivAktiv
Für neue Projekte empfohlenJaJa
OOP-SchnittstelleJaJa
Prozedurale SchnittstelleJaNein
API unterstützt nicht-blockierende, asynchrone Abfragen mit mysqlndJaNein
Persistente (dauerhafte) VerbindungenJaJa
API unterstützt ZeichensätzeJaJa
API unterstützt serverseitige vorbereitete AnweisungenJaJa
API unterstützt clientseitige vorbereitete AnweisungenNeinJa
API unterstützt gespeicherte ProzedurenJaJa
API unterstützt MehrfachanweisungenJaWeitestgehend
API unterstützt TransaktionenJaJa
Transaktionen können mit SQL gesteuert werdenJaJa
Unterstützt die gesamte Funktionalität von MySQL 5.1+JaWeitestgehend
To Top