Signatur
Beschreibung
mysqli_driver implementiert das Monostate-Entwurfsmuster: Obwohl beliebig viele Instanzen erzeugt werden können, teilen sie sich denselben internen Zustand. Das bedeutet, eine Änderung an einer Instanz wirkt sich sofort auf alle anderen Instanzen aus — ähnlich wie ein Singleton, jedoch ohne statische Zugriffsmethode.
Die wichtigste Anwendung der Klasse ist die Steuerung des Fehlerbehandlungsmodus via der Eigenschaft report_mode. Mit ihr lässt sich festlegen, ob MySQLi-Fehler stille Rückgabewerte (MYSQLI_REPORT_OFF), Warnungen (MYSQLI_REPORT_ERROR) oder Ausnahmen (MYSQLI_REPORT_STRICT) auslösen. Ab PHP 8.1 ist MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT der Standard.
Zusätzlich stellt die Klasse schreibgeschützte Eigenschaften bereit, z. B. client_info und client_version, die Versionsinformationen über die zugrunde liegende libmysql- oder mysqlnd-Bibliothek liefern.
In der Praxis wird mysqli_driver meist einmalig am Anfang eines Skripts oder in einem Bootstrap-Skript verwendet, um das Fehlerverhalten global zu konfigurieren, bevor die erste Datenbankverbindung aufgebaut wird.
Beispiele
Fehlerberichterstattung auf Exceptions umstellen
<?php
// Einmal global konfigurieren — gilt für alle mysqli-Verbindungen
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;
try {
$mysqli = new mysqli('localhost', 'user', 'wrong_password', 'testdb');
$result = $mysqli->query('SELECT * FROM nicht_existierende_tabelle');
} catch (mysqli_sql_exception $e) {
echo 'Datenbankfehler: ' . $e->getMessage() . PHP_EOL;
echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
Treiber-Versionsinformationen abfragen
<?php
$driver = new mysqli_driver();
echo 'Client-Info: ' . $driver->client_info . PHP_EOL;
echo 'Client-Version: ' . $driver->client_version . PHP_EOL;
echo 'Driver-Version: ' . $driver->driver_version . PHP_EOL;
// Monostate-Verhalten demonstrieren:
$driver2 = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_OFF;
echo 'report_mode via driver2: ' . $driver2->report_mode . PHP_EOL; // Gibt 0 aus
// Wichtig · Fallstricke
Änderung in PHP 8.1: Der Standard-report_mode wurde von MYSQLI_REPORT_OFF auf MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT geändert. Bestehender Code, der sich auf stille Fehler verlässt, muss angepasst werden oder den Modus explizit auf MYSQLI_REPORT_OFF zurücksetzen.
Sicherheitshinweis: Fehlermeldungen können sensible Informationen enthalten (Tabellennamen, Datenbankstruktur). Im Produktivbetrieb sollte MYSQLI_REPORT_STRICT zwar aktiv sein, Exceptions jedoch nur intern geloggt und dem Nutzer keine Details angezeigt werden.
Die Eigenschaften client_info, client_version und driver_version sind schreibgeschützt; nur report_mode ist beschreibbar.