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_ERRMODE, PDO::[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_ERRMODE, PDO::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_ERRMODE, PDO::ERRMODE_EXCEPTION);
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt