Hauptmenü

Untermenü

PDO - Fehlerbehandlungn

1. Vorab

... eine gute Nachricht. Bei PDO hat man diese schrottige Unterscheidung zwischen connect_error/connect_errno und error/errno wieder in den Orkus befördert. Also dahin, wo dieser Blödsinn hingehört.

2. Das Prinzip

PDO kennt drei Stufen bei der Fehlerbehandlung. Gesteuert werden sie über die Konstante ATTR_ERRMODE, plus die entsprechende Angabe eines Wertes. Auch hierbei handelt es sich um Konstanten. Als das wären.

ERRMODE_SILENT

Nun, zunächst mal macht diese Konstante ihrem Namen alle Ehre. Denn bei dieser Einstellung gibt PDO keinen Mucks von sich und man muss sich die Fehlermeldungen über eine Methode holen (dazu gleich mehr).

ERRMODE_WARNING

Durch diesen Wert ist PDO schon ein wenig auskunftsfreudiger und haut uns zum Beispiel bei einem Fehler in der SQL-Syntax oder bei einem Zugriff auf eine nicht existente Tabelle eine Warnmeldung um die Ohren.

ERRMODE_EXCEPTION

Wie man aus dem Namen schon erschließen kann, bringt PDO endlich auch eine eigene Exception-Klasse. Bei dieser Einstellung wird dann immer eine Ausnahme geworfen, die erstens sehr detailliert ist und zweitens sehr leicht abgefangen werden kann. Die Details dazu kommen später.

3. Die Stufe einstellen

Zunächst mal müsst ihr wissen, dass ERRMODE_SILENT der Standardwert ist, wenn man nicht etwas anderes angibt. Um dieses vor allen in der Entwicklungsphase zu beseitigen muss man dem Objekt aus der PDO-Klasse das entsprechend mitteilen. Dazu nehmen wir die (hoffentlich) schon bekannte Methode setAttribute. Von Prinzip her sieht das dann so aus.


$pdo  = new PDO ($server$user$password);
$pdo -> setAttribute(PDO::ATTR_ERRMODEPDO::[FEHLERSTUFE]);

Und was nun?

Sagen wir es mal so. ERRMODE_SILENT ist Biberkacke und sollte meiner Meinung nach überhaupt nicht benutzt werden. Wer von Exceptions keine Ahnung hat, sollte zumindest mit ERRMODE_WARNING arbeiten. Also so.


$pdo  = new PDO ($server$user$password);
$pdo -> setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_WARNING);

Ansonsten sollte man meiner Meinung nach immer(!) mit ERRMODE_EXCEPTION arbeiten. Keine Ahnung, warum das nicht die Standardvorgabe ist.


$pdo  = new PDO ($server$user$password);
$pdo -> setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt