Da die meisten empfohlenen Fehlermodus für PDO ist ERRMODE_EXCEPTION
, keine direkte execute()
Ergebnis Überprüfung wird immer Arbeit . Da die Codeausführung nicht einmal die in anderen Antworten angegebene Bedingung erreicht.
Es gibt also drei mögliche Szenarien, um das Ergebnis der Abfrageausführung in PDO zu verarbeiten:
- Um den Erfolg zu beurteilen, ist keine Überprüfung erforderlich. Bleiben Sie einfach bei Ihrem Programmablauf.
- Um den unerwarteten Fehler zu behandeln, bleiben Sie dabei - es ist kein sofortiger Behandlungscode erforderlich. Im Falle eines Datenbankfehlers wird eine Ausnahme ausgelöst, die an den standortweiten Fehlerbehandler weitergeleitet wird, der schließlich zu einer allgemeinen 500-Fehlerseite führt.
- Verwenden Sie einen
try..catch
Operator, um den erwarteten Fehler wie einen doppelten Primärschlüssel zu behandeln, und wenn Sie ein bestimmtes Szenario haben, um diesen bestimmten Fehler zu behandeln .
Für einen normalen PHP-Benutzer klingt es ein bisschen fremd - wie ist das, um das direkte Ergebnis der Operation nicht zu überprüfen? - aber genau so funktionieren Ausnahmen - Sie überprüfen den Fehler woanders. Ein für alle Mal. Sehr praktisch.
Kurz gesagt: In einem normalen Code benötigen Sie überhaupt keine Fehlerbehandlung. Behalten Sie einfach Ihren Code wie er ist:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
Bei Erfolg wird dies angezeigt. Bei einem Fehler wird die reguläre Fehlerseite angezeigt, die Ihre Anwendung für einen solchen Anlass anzeigt.
Nur für den Fall, dass Sie ein anderes Behandlungsszenario haben als nur den Fehler zu melden, fügen Sie Ihre Einfügeanweisung in einen try..catch
Operator ein, prüfen Sie, ob es sich um den erwarteten Fehler handelt, und behandeln Sie ihn. oder - wenn der Fehler anders war - die Ausnahme erneut auslösen , um die übliche Behandlung durch den standortweiten Fehlerbehandler zu ermöglichen. Unten finden Sie den Beispielcode aus meinem Artikel zur Fehlerbehandlung mit PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
Im obigen Code prüfen wir, ob der bestimmte Fehler eine Aktion ausführt, und lösen die Ausnahme für jeden anderen Fehler (z. B. keine solche Tabelle) erneut aus, der einem Programmierer gemeldet wird.
Während noch einmal - nur um einem Benutzer etwas wie "Ihre Einfügung war erfolgreich" zu sagen , wird nie eine Bedingung benötigt.