PHP 8.4.1 Released!

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/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
add a note

User Contributed Notes 2 notes

up
41
alvaro at demogracia dot com
12 years ago
Apart from the feature list, I suggest you try out both MySQLi and PDO and find out what API design you like most. MySQLi is more powerful and probably more complex to learn. PDO is more elegant and has the advantage that you only need to learn one PHP API if you need to work with different DBMS in the future.
up
10
rellect at gmail dot com
5 years ago
Another point to consider and one of the advantages of PDO is that it's not limited to mysql and supports other database engines such as PostgreSQL, SQLite, etc.
To Top