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

Swoole\MySQL\Exception

Klasse

Wird bei einem Fehler des asynchronen Swoole-MySQL-Clients ausgelöst und liefert detaillierte Fehlerinformationen.

seit PHP 4.0.0 Kategorie: error

Signatur

class Swoole\MySQL\Exception extends \Exception

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

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();
    }
});
Abfragefehler: You have an error in your SQL syntax; ... Fehlercode: 1064

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