Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Łapanie wyątków z baz danych
tadeurz
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

Ostrzeżenie: (0%)
-----


Witam mam kolejne pytanie.
Komunikując się z jakąkolwiek bazą danych używamy driverów, one są tak genialne że wyrzucają nam wyjątki. Rozchodzi mi się o sens wyłapywania wyjątku przy każdym zapytaniu. Po dłuższym zastanowieniu doszedłem do wniosku, że to nie ma sensu. W przykładach posłużę się MongoDB.
  1. //w ciele wrappera/adaptera mamy utworzenie klienta
  2. Try{
  3. $this->db = new MongoClient();
  4. }catchMongoConnectionException $e){
  5. ...
  6. }
  7. //gdzieś w kodzie
  8. //pobieramy gdzieś listę użytkowników
  9. Try{
  10. $usersCursor = $this->db->myDB->collections->find()
  11. }catch(MongoCursorException $e){
  12. ...
  13. }
  14. //chcemy pobrać informacje na temat użytkownika
  15. Try{
  16. $query = array(_ID=>$player);
  17. $usersCursor = $this->db->myDB->collections->findOne($query)
  18. }catch(MongoCursorException $e){
  19. ...
  20. }

Takie łapanie błędów ma sens tylko w fazie debugowania jeżeli zapytanie nie działa tak jak chcemy. Jeżeli nasze zapytanie zadziała raz, to nie ma szans, żeby nagle przestało działać i wyrzucać wyjątki. Dlatego jedynym miejscem gdzie wystarczy złapać wyjątek jest:
  1. Try{
  2. $this->db = new MongoClient();
  3. }catchMongoConnectionException $e){
  4. ...
  5. }


Mylę się?

Ten post edytował tadeurz 9.08.2013, 09:21:17
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Mylisz się co do tego gdzie może pojawić się wyjątek co już Ci napisano. Masz jednak rację co do tego, że łapanie wyjątków wszędzie, gdzie to tylko możliwe jest bez sensu. Wyjątki łapiemy dopiero wtedy, kiedy możemy z nimi coś sensownego zrobić. W przypadku błędów wynikających z pracy sterownika bazy danych niemal zawsze jedynym co możemy zrobić to wyświetlić komunikat 500 Internal Server Error i co najwyżej jawnie cofnąć wszystkie otwarte transakcje. Dlatego spokojnie możesz utworzyć sobie blok try..catch w jakimś centralnym miejscu, w którym startuje aplikacja i tam przechwytywać wszystkie niewychwycone wyjątki w celu "kontrolowanego wywalenia strony".
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 19:36