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
tadeurz
post
Post #2





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

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


Nie zgodzę się z wami. Wszystko zależy też od tego jak to zakodujemy (i od tego jak stosujemy wyjątki, i jak one powinny być stosowane. Ale jest to temat na który każdy programista ma inne zdanie. Jest wiele tematów na ten temat więc nie poruszajmy tej kwestii)
Dlatego jeżeli raz zaprojektujemy zapytanie to ono nigdy nie wyrzuci wyjątku(*):
  1. $var->check($email) //funkcja która nam sprawdza czy email jest poprawny, w przeciwnym wypadku nawet nie idzie dalej.
  2. // tutaj ważna rzecz o której piszecie czyli złych danych (typach, przedziałach itp.)
  3. //ja w swoich projektach nie pozwalam żeby do zapytania przeszło coś co miało być liczbą a jest stringiem
  4. //jeżeli jakieś pole jest opcjonalne, to n poziomie bazy danych ustawiam default value NULL (jako że w mongoDB są dokumenty których struktura może się różnić nawet tego pola nie dodaje.)
  5. If ( $pole = $var->check($_POST[‘pole’]) ) $update[‘pole’] = $pole;
  6. If ( $pole1 = $var->check($_POST[‘pole1’]) ) $update[‘pole1’] = $pole1;
  7. //po czymś takim niemożliwe jest w zapytaniu okazało się że pole jest puste
  8. $query = array(_id: $email)
  9. $fields=array(‘$set’=>$update);
  10. If( $this->db->myDB->collection->update($query,$fields) ) //jeśli wykona TRUE, jeśli nie FALSE
  11. //jeżeli dane będą niespójne to zwróci FALSE = nie wykonałem zapytania



*Wyrzuci wyjątek tylko i tylko wtedy gdy jak pisaliście baza padnie W CZASIE wykonywania skryptu, czyli akurat wstrzeli się w setne sekundy, to nie jest ironia BO: dla milionów wyświetleń I can be happen. Crozin napisał co z tym trzeba zrobić (globalny blok try). Jeśli mamy jakiegoś adaptera przez który przechodzą zapytania to on jest dobrym miejscem na tego typu blok.
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: 5.10.2025 - 17:15