ďťż

[PHP] PDO + wyświetlanie błędów Ekscepcje, warningi czy tryb cichy?

       

Podstrony


telcocafe

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:try { ... return 1; } catch(PDOException $e) { }
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ę? :)
if( $db->commit() ) { ... return 1; } else { /* błąd */ }
PS. Jeśli wyjątki są lepsze dla baz danych, podajcie konkretne argumenty przemawiające za nimi. :)
Użytkownik Ferrari edytował ten post 17 marzec 2008, 18:23


W wyjątku możesz zrobić coś takiego, jak jest na tym forum. Gdy operacja dodania postu się nie powiedzie, wyświetlana jest zapamiętana treść w textboksie na stronie informującej o błędzie.
Możesz też zapisywać błędy w pliku - można powiedzieć, że bezpieczniejsze od ich wyświetlania. Sam używam takiego sposobu.

Wyjątki stosowane są przynajmniej w większości szanujących się języków programistycznych. Wystąpienie wyjątku przerywa działanie aplikacji, w przypadku "warningów" i innych dziwactw niekoniecznie.


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?

Obie bazy obsługują transakcje. W MySQL użyj tabel InnoDB. Co do reszty to coś kręcisz.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.