Signatur
Beschreibung
Swoole\Coroutine\MySQL\Exception ist die spezifische Ausnahme-Klasse, die vom koroutinenfähigen MySQL-Client (Swoole\Coroutine\MySQL) geworfen wird, wenn ein Fehler bei der Datenbankinteraktion auftritt – etwa bei fehlgeschlagenen Verbindungen, ungültigen SQL-Abfragen oder Verbindungsabbrüchen während einer Koroutine.
Da sie von \RuntimeException erbt, können alle Standard-Methoden wie getMessage(), getCode() und getTrace() genutzt werden. Der Fehlercode entspricht dabei in der Regel dem MySQL-Fehlercode (z. B. 1045 für Zugangsverweigerung), während die Nachricht den originalen MySQL-Fehlertext enthält.
Diese Klasse sollte in einem try/catch-Block innerhalb einer Swoole-Koroutine abgefangen werden, um Datenbankfehler gezielt zu behandeln, ohne die gesamte Koroutine zum Absturz zu bringen. Eine robuste Fehlerbehandlung ist besonders in hochparallelen asynchronen Anwendungen essenziell.
Zu beachten ist, dass Swoole\Coroutine\MySQL sowie diese Ausnahme-Klasse ab Swoole 5.0 als veraltet gelten und durch PDO-Koroutinen-Unterstützung oder andere Treiber abgelöst wurden.
Beispiele
Verbindungsfehler abfangen
<?php
use Swoole\Coroutine\MySQL;
use Swoole\Coroutine\MySQL\Exception as MySQLException;
Swoole\Coroutine\run(function () {
$db = new MySQL();
try {
$db->connect([
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'falscher_benutzer',
'password' => 'falsches_passwort',
'database' => 'testdb',
]);
} catch (MySQLException $e) {
echo 'MySQL-Fehler: ' . $e->getMessage() . PHP_EOL;
echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
});
Abfragefehler bei ungültigem SQL abfangen
<?php
use Swoole\Coroutine\MySQL;
use Swoole\Coroutine\MySQL\Exception as MySQLException;
Swoole\Coroutine\run(function () {
$db = new MySQL();
$db->connect([
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'root',
'password' => 'geheimes_passwort',
'database' => 'testdb',
]);
try {
// Absichtlich fehlerhaftes SQL
$result = $db->query('SELECT * FRUM nicht_existente_tabelle');
} catch (MySQLException $e) {
echo 'Abfragefehler: ' . $e->getMessage() . PHP_EOL;
echo 'SQL-Fehlercode: ' . $e->getCode() . PHP_EOL;
} finally {
$db->close();
}
});
// Wichtig · Fallstricke
Deprecation-Hinweis: Swoole\Coroutine\MySQL und die zugehörige Exception-Klasse gelten ab Swoole 5.0 als veraltet (deprecated). Für neue Projekte wird empfohlen, stattdessen den PDO-basierten Koroutinen-Treiber oder Swoole\Coroutine\PostgreSQL (für PostgreSQL) zu verwenden.
Ausnahme vs. Fehlerprüfung: Nicht jeder Fehler wirft automatisch eine Exception. Ältere Versionen des MySQL-Clients geben bei manchen Fehlern false zurück, anstatt eine Ausnahme zu werfen. Es empfiehlt sich, sowohl try/catch als auch eine Überprüfung des Rückgabewerts zu kombinieren.
Sicherheit: Fehlermeldungen sollten niemals direkt an den Endnutzer ausgegeben werden, da sie Datenbankstruktur, Tabellennamen oder Zugangsdetails preisgeben können. Stets in Log-Dateien schreiben und dem Nutzer nur eine generische Fehlermeldung anzeigen.