Signatur
Beschreibung
Swoole\MySQL\Exception ist die spezifische Ausnahme-Klasse des asynchronen MySQL-Clients von Swoole. Sie wird ausgelöst, wenn bei der Verbindung zum MySQL-Server, beim Senden von Abfragen oder beim Verarbeiten von Ergebnissen ein Fehler auftritt. Da sie von der Standard-PHP-Klasse \Exception erbt, stehen alle üblichen Methoden wie getMessage(), getCode() und getTrace() zur Verfügung.
Typische Auslöser dieser Ausnahme sind Verbindungsfehler (z. B. falscher Host, Port oder Zugangsdaten), Syntaxfehler in SQL-Abfragen, Timeout-Überschreitungen oder fehlende Berechtigungen auf Datenbankebene. Der Fehlercode (getCode()) entspricht in der Regel dem MySQL-eigenen Fehlercode, sodass eine präzise Fehlerbehandlung möglich ist.
Da Swoole auf eine koroutinen-basierte, nicht-blockierende Architektur setzt, sollte diese Ausnahme innerhalb von try/catch-Blöcken in Koroutinen abgefangen werden. Eine unbehandelte Swoole\MySQL\Exception führt zum Abbruch der aktuellen Koroutine und kann den Worker-Prozess destabilisieren.
Hinweis: Der Swoole\MySQL-Client gilt seit Swoole 4.3.0 als veraltet (deprecated). Es wird empfohlen, stattdessen den PDO-MySQL-Treiber in Kombination mit Swoole-Koroutinen oder Swoole\Coroutine\MySQL zu verwenden.
Beispiele
Verbindungsfehler mit try/catch abfangen
<?php
use Swoole\Coroutine\MySQL;
use Swoole\MySQL\Exception;
Swoole\Coroutine\run(function () {
$db = new MySQL();
try {
// Absichtlich falsche Zugangsdaten
$db->connect([
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'ungueltig',
'password' => 'falsches_passwort',
'database' => 'nicht_vorhanden',
]);
} catch (Exception $e) {
echo 'MySQL-Fehler: ' . $e->getMessage() . PHP_EOL;
echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
});
SQL-Fehler bei einer Abfrage abfangen
<?php
use Swoole\Coroutine\MySQL;
use Swoole\MySQL\Exception;
Swoole\Coroutine\run(function () {
$db = new MySQL();
$db->connect([
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'root',
'password' => 'geheim',
'database' => 'testdb',
]);
try {
// Syntaktisch ungültiges SQL
$result = $db->query('SELEKT * FROM nicht_existente_tabelle');
} catch (Exception $e) {
echo 'Abfragefehler: ' . $e->getMessage() . PHP_EOL;
echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
} finally {
$db->close();
}
});
// Wichtig · Fallstricke
Deprecation: Der Swoole\MySQL-Client (und damit auch diese Exception-Klasse) ist seit Swoole 4.3.0 als veraltet markiert und wurde in neueren Versionen entfernt. Für neue Projekte sollte Swoole\Coroutine\MySQL oder eine PDO-Lösung mit Koroutinen-Hook (Swoole\Runtime::enableCoroutine()) verwendet werden.
Der Fehlercode in getCode() entspricht dem nativen MySQL-Fehlercode (z. B. 1045 für Zugangsfehler, 1064 für Syntaxfehler). Diese Codes können in der offiziellen MySQL-Fehlerdokumentation nachgeschlagen werden.
Unbehandelte Ausnahmen innerhalb einer Swoole-Koroutine führen lediglich zum Abbruch der betreffenden Koroutine, nicht des gesamten Prozesses — dennoch sollte jede Exception ordnungsgemäß behandelt werden, um Ressourcenlecks (z. B. offene Datenbankverbindungen) zu vermeiden.