Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PDO + wyświetlanie błędów, wyjątki, ostrzeżenia czy tryb cichy?
WebCM
post
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


PDO oferuje 3 możliwości wyświetlania błędów:
- tryb cichy - brak komunikatów
- ostrzeżenia - Warning:
- wyjątki - Exception:

Która z nich jest najodpowiedniejsza do budowy aplikacji i wydajna? Aktualnie używam wyjątków. Przejdźmy do sytuacji, gdzie redaktor wysyła formularz z artykułem. Nie może go utracić w razie błędu!

W przypadku WYJĄTKÓW:
Kod
try { ... return 1; } catch(PDOException $e) { /*odeślij formularz z powrotem*/ }

Nie wystarczy zamknąć tylko PDO::commit() w instrukcji TRY, aby nie zatrzymywać wykonywania się skryptu, gdy wystąpi błąd. Dotyczy to nawet PDO::prepare - przynajmniej dla SQLite. W tym przypadku powodem mogą być pewnie literówki, nieznane funkcje, itd...

Gdy w try{} zamkniemy tylko commit(); - prawdopodobieństwo utraty danych z formularza jest raczej małe. Mimo tego należy rozważyć: brak kompatybilności SQLite / MySQL między wersjami, inne konfiguracje, czy nawet błąd w skrypcie?

Czy zastąpienie wyjątków wyjątków trybem cichym lub ostrzeżeniami (dla celów debuggingu) jest dobrym rozwiązaniem, czy jednak stanowi to potencjalną lukę w bezpieczeństwie? Nie chodzi tu o związki między zapytaniami (zapytanie X konieczne do wykonania zapytania Y), bo od tego są transakcje - mam rację? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Kod
if( $db->commit() ) { ... return 1; } else { /* błąd - odeślij formularz użytkownikowi */ }

PS. Jeśli wyjątki są lepsze dla baz danych, podajcie konkretne argumenty przemawiające za nimi. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
WebCM
post
Post #2





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Są różne opinie. Wyjaśnię, o co mi właściwie chodzi. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Przykład: Fragment pliku - edycja sondy

Przejdźmy do $db->commit(). Czy baza danych zawsze wyrzuci błąd, gdy transakcja nie powiedzie się? Czy PDO zawsze automatycznie cofnie transakcję w przypadku błędu, czy trzeba użyć try{} catch(){}? Czy execute() i commit() zwracają FALSE, gdy rekord nie zostanie dodany - zarówno w SQLite i MySQL?

Z jednej strony do powiązane ze sobą zapytania powinno wykonywać się w transakcjach. Z drugiej można o tym zapomnieć. Czy wg Was należy przerywać wykonywanie skryptu PHP, gdy wystąpi błąd bazy danych i dlaczego? Właściwie prawdopodobieństwo wystąpienia błędu w dobrze napisanej aplikacji jest małe, ale chyba lepiej zabezpieczyć się? Przeglądarka nie zawsze zapamiętuje dane, jakie użytkownik wpisał do formularza, dlatego serwer powinien go odesłać z powrotem.

Try{} i catch{} przydaje się zawsze podczas tworzenia obiektu PDO. Wracając jednak do "ostrzeżeń": co w przypadku wyłączenia błędów na serwerze (gdy nawet error_reporting nie działa)?

PS. Jeszcze 1 sytuacja. Pobieramy dane (np. news, temat) z bazy. Gdy obejmiemy zapytanie instrukcją try{}catch{}, PDO nie wyrzuci błędu, gdy rekord nie istnieje. I tak musimy skorzystać z instrukcji warunkowej IF:
Kod
if( ! $news = $res -> fetch(2) ) return;


Ten post edytował WebCM 18.03.2008, 20:05:25
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: 16.10.2025 - 19:30