Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: obsługa błędów połączenia z bazą danych
Forum PHP.pl > Forum > PHP
Birkoff
Problem wygląda następująco:

Piszę instalator do systemu CMS. Instalator ma testować dane do połączenia z bazą danych. Sęk w tym, że chce zeby w razie błędu połączenia nie wywalało mi komunikatu serwowanego standardowo przez php ale zeby strona normalnie wię wyświetliła z moim komunikatem błędu W MIEJSCU W KTÓRYM JA CHCE a nie na początku strony.

1. ... or die(...); - odpada bo nie wyświetli mi strony z formularzem i danymi
2. trigger_error("text", E_USER_ERROR) - no ok, zmienilem komunikat ale efekt wciaz nie ten, ciagle wywala Warning: mysql_connect(): Access denied for user: 'test@localhost

Więc pytanie do ambitnych: jak to zrobić?

---------------------------------------------------

No i zrobiłem - działa, choć na pewno da się to zrobić lepiej:

  1. <?php
  2. if (@mysql_connect($_POST['database'], $_POST['database_login'], $_POST['database_passwd'])) {
  3. $db_error='';
  4. }
  5. else {
  6. $db_error='Blad polaczenia z baza danych!';
  7. }
  8. ?>



a dalej w tekście strony:

  1. <?php if (!empty($db_error)) { echo '<p align="center" style="color: red;">'.$db_error.'</p>'; }?>



Niemniej czekam na Wasze propozycje i uwagi. smile.gif
darecki
ja bym wstawil error_reporting(0); na samym poczatku no i funkcje tak jak ty poprzedził @ i powinno nie wyzucac juz bledow
mike
@Birkoff Pomyśl o wykorzystaniu wyjątków, to jest najlepsze wyjście i zresztą wyjątki do tego są właśnie stworzone.

@darecki tak właśnie powstają skryptu wolne i źle napisane.
Ukrycie i stłumienie wszystkich błędów to ucieczka od problemu a nie jego rozwiązanie. Nie powinno się uprawiać takich praktyk.
Nie wiem czy wiesz ale skrypty, które generują dużo błędów (choć wcale nie musi ich być dużo) nawet takich, które zostają stłumione poprzez @ i niewyświetlone dzięki error_reporting() potrafią wykonywać się do 30% dłużej.
darecki
mike_mech nie mowie tu o tym aby odrazu wstawiac i tlumic bledy jak by ich nie bylo mam na mysli wykonanie skryptu z obsluga bledow i jezeli juz mamy pewnosc ze jest oki i uruchamiamy skrypt na sieci to w ostatnim etapie (przed wzuceniem na ftp-a) wstawienie error_reporting
Crozin
Temat bardzooo stary, ale muszę go odkopać winksmiley.jpg
O co chodzi? Mianowicie do obsługi błędów (w prostym skrypcie, który właśnie piszę) postanowiłem użyć set_error_handler() + trigger_error() (właściwie to ten sposób używam pierwszy raz :]).No i wszystko jest ładnie, z jednym małym wyjątkiem (zademonstruję na prostym przykładzie)
  1. <?php
  2.  
  3. error_reporting(E_ALL | E_STRICT);
  4.  
  5. function displayerror($no, $msg){
  6. echo($msg.'<br /><br />');
  7. }
  8.  
  9. set_error_handler('displayerror');
  10.  
  11. if(!@mysql_connect('localhostAA', 'root', ''))
  12. trigger_error('jakis komunikat (ladny)', E_USER_ERROR);
  13.  
  14. ?>
No i taki oto błąd jest generowany:
Cytat
mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'localhostAA' (11001)

jakis komunikat (ladny)
I tutaj moje pytanie. Jak "aktywować" operator @ w przypadku korzystania z powyższego skryptu? winksmiley.jpg

PS. W manualu nic nie znalazłem blink.gif
nospor
Cytat
PS. W manualu nic nie znalazłem
Kiepsko szukales:
http://pl.php.net/manual/pl/function.set-error-handler.php
Cytat
however you are still able to read the current value of error_reporting and act appropriately. Of particular note is that this value will be 0 if the statement that caused the error was prepended by the @ error-control operator.

i w twojej funkcji walisz:
  1. <?php
  2. if (!error_reporting()) echo 'byla malpa @';
  3. ?>
Crozin
Coż... jedyne co może mnie chyba teraz opisać to to. Ide pouczyć się czytać ze zrozumieniem :/

Dzięki i pozdrawiam,
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.