![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 2 Dołączył: 15.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
Mam problem ze zrzuceniem wyjątku. W modelu mam funkcję save, oto jej ciało:
Chcę zrzucić wyjątek, gdy podczas zapisywania wystąpi naruszenie unikalności jakiegoś pola w tabeli, np title. No i nie wiem gdzie wrzucić throw new Exception('wiadomosc'); Próbowałem sprawdzenie, czy $result->execute() zwróci coś innego niż true, ale nie działa. Wciąż przy wyłapywaniu wyjątku dostaję wiadomość, jakbym w ogóle throw new Exception nie umieśił w Modelu. Cytat SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'mmmmmmmmmmm' for key 'title' Kod w kontrolerze:
W widoku, wiadomo, wyświetlam komunikat wyjątku. edit: Teraz już nie wiem, czy w ogóle mogę własny komunikat wysłać, w manualu znalazłem, że nie powinno się jawnie zrzucać wyjątków klasy PDOException ![]() Ale nie wychodziło nawet z Exception. Ten post edytował Piotrbaz 23.03.2013, 09:13:41 -------------------- $piotrbaz->get_Signature();
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 2 Dołączył: 27.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Cytat SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'mmmmmmmmmmm' for key 'title' A to czasem nie jest php'owy fatal? Jeśli tak, to żeby to przechwycić musiałbyś zrobić swój error_handler |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 2 Dołączył: 15.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ok, doszedłem do tego, że miałem w połączeniu z bazą ustawione zrzucanie wyjątków klasy PDOException, a nie mogę ich jawnie zrzucać.
Po usunięciu
mogę normalnie zrzucać wyjątki Exception. Tylko nie bardzo rozumiem sens PDOException, skoro nie mogę wpisać tam własnego komunikatu. Ten post edytował Piotrbaz 24.03.2013, 14:05:08 -------------------- $piotrbaz->get_Signature();
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Powinieneś samodzielnie sprawdzać czy w bazie nie istnieje już dany rekord (unikalna wartość), a nie oczekiwać na wyjątek.
2. Cytat Tylko nie bardzo rozumiem sens PDOException, skoro nie mogę wpisać tam własnego komunikatu. Co to znaczy wrzucić własny komunikat? Jeżeli chcesz jakoś rozbudować zawartość rzucanego wyjątku przechwyć rzucony wyjątek PDO i "opakuj go" we własny wyjątek:
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 2 Dołączył: 15.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
1. Powinieneś samodzielnie sprawdzać czy w bazie nie istnieje już dany rekord (unikalna wartość), a nie oczekiwać na wyjątek. Rozwiązanie z UNIQUE jest prostsze, ale skoro to napisałeś, znaczy że gorsze. Dlaczego ? 2. Co to znaczy wrzucić własny komunikat? Myślałem, że mogę po prostu zrobić jak ze zwykłą klasą Exception
Ten post edytował Piotrbaz 24.03.2013, 19:22:26 -------------------- $piotrbaz->get_Signature();
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Rozwiązanie z UNIQUE jest prostsze, ale skoro to napisałeś, znaczy że gorsze. Dlaczego ? Chyba źle zrozumiałeś. Klucz typu UNIQUE ma nadal pozostać . Po prostu zamiast:
Cytat Wyjątki PDO mają sobą reprezentować jakieś problemy z samym połączeniem z bazą danych i właściwie tylko "wnętrzności" PDO powinny rzucać wyjątek tego typu. Twoje wyjątki nie mają z tym nic wspólnego.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 08:32 |