![]() |
![]() |
![]() ![]()
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) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Wyjątki może pozwalają dostosować wyświetlenie błędu do sytuacji (którego odwiedzający raczej nie powinien zobaczyć), ale PHP nie powinien wymuszać podania nazwy klasy w catch - wystarczy zmienić PDO np. na MySQLi i skrypt posypie się przy błędzie: To co napisales ma ci jedynie pomoc rozroznic co spowodowalo wyjatek. jesli ci to zwisa i powiewa to zamiast PDOExeception daj poprostu ExceptionKod catch(PDOException $e) ps: Cytat wystarczy zmienić PDO np. na MySQLi i skrypt posypie się przy błędzie ciut kiepski argument. rownie dobrze moge napisac:nie powinno sie nadawac nazw zmiennym. wystarczy ze zmienie nazwe i juz ten kod sie wysypie:
A teraz zmienie kod $zm='cos' na $zmiennainna='cos'l i juz mi sie echo $zm; wysypie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 21:22 |