Start · Sprachen · PHP · Referenz · mysqli_driver

mysqli_driver

Klasse

Steuert den globalen MySQLi-Treiber nach dem Monostate-Muster — alle Instanzen greifen auf denselben Treiberzustand zu.

seit PHP 5.0.0 Kategorie: db

Signatur

class mysqli_driver

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;
}
Datenbankfehler: Access denied for user 'user'@'localhost' (using password: YES) Fehlercode: 1045

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
Client-Info: mysqlnd 8.1.0 Client-Version: 80100 Driver-Version: 202009300 report_mode via driver2: 0

// 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.