Signatur
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;
}
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;
}
// 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.