Start · Sprachen · PHP · Referenz · MongoDB\Driver\Exception\ServerException

MongoDB\Driver\Exception\ServerException

Klasse

Wird ausgelöst, wenn ein serverseitiger Fehler vom MongoDB-Server gemeldet wird.

seit PHP 1.5.0 Kategorie: error

Signatur

class MongoDB\Driver\Exception\ServerException extends MongoDB\Driver\Exception\RuntimeException implements MongoDB\Driver\Exception\Exception

Beschreibung

Die Klasse MongoDB\Driver\Exception\ServerException repräsentiert Fehler, die direkt vom MongoDB-Server zurückgegeben werden. Sie erbt von MongoDB\Driver\Exception\RuntimeException und implementiert das Marker-Interface MongoDB\Driver\Exception\Exception.

Typische Auslöser sind ungültige Abfragen, Schreibkonflikte, nicht vorhandene Collections oder Operationen, die aufgrund von Berechtigungen oder Schemaverletzungen abgelehnt werden. Der Fehlercode entspricht dabei dem MongoDB-spezifischen Server-Fehlercode.

Da ServerException die gemeinsame Basisklasse für mehrere konkretere Ausnahmen ist (z. B. BulkWriteException, WriteException oder CommandException), kann sie sinnvoll als Catch-Typ verwendet werden, wenn alle serverseitigen Fehler zentral behandelt werden sollen.

Im Gegensatz zu ConnectionException, die Verbindungsprobleme auf Netzwerkebene beschreibt, signalisiert ServerException stets, dass die Verbindung zum Server erfolgreich war, der Server jedoch die Anfrage mit einem Fehler abgewiesen hat.

Beispiele

Serverseitigen Fehler bei einer Datenbankoperation abfangen

<?php
use MongoDB\Driver\Manager;
use MongoDB\Driver\Command;
use MongoDB\Driver\Exception\ServerException;

$manager = new Manager('mongodb://localhost:27017');

try {
    // Ungültiger Aggregations-Befehl, der einen Serverfehler auslöst
    $command = new Command([
        'aggregate' => 'users',
        'pipeline'  => [['$invalidStage' => []]],
        'cursor'    => new stdClass(),
    ]);
    $manager->executeCommand('testdb', $command);
} catch (ServerException $e) {
    echo 'Serverseitiger Fehler (Code ' . $e->getCode() . '): ' . $e->getMessage() . PHP_EOL;
}
Serverseitiger Fehler (Code 40324): Unrecognized pipeline stage name: '$invalidStage'

Unterscheidung zwischen Server- und Verbindungsfehlern

<?php
use MongoDB\Driver\Manager;
use MongoDB\Driver\Command;
use MongoDB\Driver\Exception\ServerException;
use MongoDB\Driver\Exception\ConnectionException;
use MongoDB\Driver\Exception\Exception as MongoException;

$manager = new Manager('mongodb://localhost:27017');

try {
    $command = new Command(['dropDatabase' => 1]);
    $manager->executeCommand('restricted_db', $command);
} catch (ServerException $e) {
    // Fehler vom Server (z. B. fehlende Berechtigung)
    echo 'Server hat die Operation abgelehnt: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
} catch (ConnectionException $e) {
    // Netzwerk- oder Verbindungsproblem
    echo 'Verbindungsfehler: ' . $e->getMessage() . PHP_EOL;
} catch (MongoException $e) {
    // Alle anderen MongoDB-Fehler
    echo 'Allgemeiner MongoDB-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Server hat die Operation abgelehnt: not authorized on restricted_db to execute command { dropDatabase: 1 } Fehlercode: 13

// Wichtig · Fallstricke

Fehlercodes: Die Methode getCode() gibt den nativen MongoDB-Fehlercode zurück. Eine vollständige Liste der Fehlercodes findet sich in der MongoDB-Dokumentation.

Klassenhierarchie beachten: Konkrete Unterklassen wie MongoDB\Driver\Exception\BulkWriteException oder MongoDB\Driver\Exception\CommandException bieten zusätzliche Methoden (z. B. getWriteResult()). Wenn spezifischeres Fehlerhandling benötigt wird, sollten diese statt ServerException gefangen werden.

Nicht für Verbindungsfehler: ServerException zeigt immer an, dass eine erfolgreiche Kommunikation mit dem Server stattgefunden hat. Netzwerk- oder Authentifizierungsprobleme werden als ConnectionException oder AuthenticationException geworfen.