ďťż
Podstrony
|
telcocafePDO 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. |
|||
Sitedesign by AltusUmbrae. |