Biorąc pod uwagę, że najbardziej zalecanym trybem błędu dla PDO jest ERRMODE_EXCEPTION
, żadna bezpośrednia execute()
weryfikacja wyników nigdy nie zadziała . Ponieważ wykonanie kodu nie osiągnie nawet stanu oferowanego w innych odpowiedziach.
Tak więc istnieją trzy możliwe scenariusze obsługi wyniku wykonania zapytania w PDO:
- Aby stwierdzić sukces, nie jest potrzebna weryfikacja. Po prostu trzymaj się swojego programu.
- Aby poradzić sobie z nieoczekiwanym błędem, trzymaj się tego samego - nie jest potrzebny żaden kod obsługi natychmiastowej. Wyjątek zostanie zgłoszony w przypadku błędu bazy danych i pojawi się w programie obsługi błędów dla całej witryny, co ostatecznie doprowadzi do typowej strony błędu 500.
- Aby obsłużyć oczekiwany błąd, na przykład zduplikowany klucz podstawowy, i jeśli masz określony scenariusz obsługi tego konkretnego błędu, użyj
try..catch
operatora.
Dla zwykłego użytkownika PHP brzmi to trochę obco - jak to nie weryfikować bezpośredniego wyniku operacji? - ale tak właśnie działają wyjątki - sprawdzasz błąd gdzie indziej. Raz na zawsze. Niezwykle wygodny.
A więc w skrócie: w zwykłym kodzie nie potrzebujesz żadnej obsługi błędów. Po prostu zachowaj swój kod tak, jak jest:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!";
Jeśli się powiedzie, powie ci to, po błędzie pokaże ci zwykłą stronę błędu, którą twoja aplikacja wyświetla na taką okazję.
Tylko w przypadku, gdy masz scenariusz obsługi inny niż tylko zgłoszenie błędu, umieść instrukcję insert w try..catch
operatorze, sprawdź, czy to był oczekiwany błąd i obsłuż go; lub - jeśli błąd był inny - wyślij ponownie wyjątek, aby umożliwić obsługę błędu w całej witrynie w zwykły sposób. Poniżej znajduje się przykładowy kod z mojego artykułu o obsłudze błędów w PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
} else {
throw $e;
}
}
echo "Success!";
W powyższym kodzie sprawdzamy, czy konkretny błąd wykonuje jakąś akcję i ponownie zgłaszamy wyjątek dla dowolnego innego błędu (na przykład nie ma takiej tabeli), który zostanie zgłoszony programistowi.
Znowu - tylko po to, aby powiedzieć użytkownikowi coś w rodzaju „Twoja wstawka się powiodła”, żaden warunek nie jest nigdy potrzebny.