PDO - Fehlerbehandlungn - Die Exception-Klasse
1. Ein Segen
Fürwahr, mit dieser Exception-Klasse ist endlich mal eine vernünftige Ausnahmebehandlung möglich. Das fängt schon beim Verbindungsaufbau
an, wo man nicht mit irgendwelchen error
-Methoden von MySQLi arbeiten muss. Da reicht ein einfaches
try {
$pdo = new PDO ($server, $user, $password);
}
catch (PDOException $e) {
...
}
2. Fehlerhafte SQL-Statements abfangen
Hier arbeitet man genau so, wenn man zuvor den entsprechenden Debug-Wert mittels $pdo -> setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
gesetzt hat. Ansonsten funktioniert das nicht.
try {
// Spalte bla existiert nicht
$query = 'SELECT bla FROM suche WHERE id > 600';
$result = $pdo -> query($query);
}
catch (PDOException $e) {
print_r($e);
}
3. Die Fehlermeldung
... selber stellt sich bei einem print_r
so dar. Aus Gründen der Übersicht stelle ich nur mal die wichtigen Dinge vor.
PDOException Object
(
[message:protected] => SQLSTATE[42S22]: Column not found:
1054 Unknown column 'bla' in 'field list'
[code:protected] => 42S22
[file:protected] => [absoluter Pfad zur Datei]
[line:protected] => [Fehler in Zeile X]
[errorInfo] => Array
(
...
)
)
Die einzelnen Punkte
message
Fehlermeldung mit datenbankspezifischen Fehlercodecode
Offizieller Fehlercode nach SQL ANSIfile
Datei, die den Fehler hervorruftline
Zeile, die den Fehler hervorrufterrorInfo
Dieselben Werte wie bei der MethodeerrorInfo
Natürlich
... kann man auch hier die üblichen Methoden der "normalen" Exception-Klasse nutzen, Also zum Beispiel
getTrace
für die Ablaufverfolgung.
4. Eine eigene Exception-Klasse?
So was kann man natürlich auch machen, wenn sie auf der PDOException
aufbaut. Je nach Art und Umfang eines Projektes
ist das sogar empfehlenswert.
class myPDOException extends Exception {
...
}
Bei den geplanten Tutorials werde ich darauf genauer eingehen. Und mich genauer mit den Vor- und Nachteilen befassen. Bis dahin seid geduldig und spielt ein wenig mit PDO herum.