Start · Sprachen · PHP · Referenz · Swoole\Coroutine\MySQL\Exception

Swoole\Coroutine\MySQL\Exception

Klasse

Wird bei einem Fehler des koroutinenfähigen MySQL-Clients ausgelöst und enthält MySQL-spezifische Fehlerinformationen.

seit PHP 4.0.0 Kategorie: error

Signatur

class Swoole\Coroutine\MySQL\Exception extends \RuntimeException

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

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();
    }
});
Abfragefehler: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FRUM nicht_existente_tabelle' at line 1 SQL-Fehlercode: 1064

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