Autor Zpráva
Ben
Profil *
Ahoj, řeším jak co nejefektivněji ošetřovat logiku zpracování chyb při použíní sql dotazů. Je toto dobré řešení?
<?php
        if(mysql_query($sql)){
          //pokud je vse v poradku, presmerujeme pryc a informujeme, ze vse je ok
          header("Location: ok.php", true, 303);
          exit;
        }
        else{
          //pokusime se znovu smazat s ignorovanim chyby
          if(@mysql_query($sql)){
            //pokud je vse v poradku, presmerujeme pryc a informujeme, ze vse je ok
            header("Location: ok.php", true, 303);
            exit;
          }
          else{
            //ulozime id u neprovedeneho sql dotazu a pote jinde vypiseme
            $chyba["smazat_skupiny"][] = $id;
          }
        }
?>
Daevo12345
Profil *
zdravím, proč používáte dvakrát mysql_query jednou se zavináčem jednou bez, přeci pokud to nepůjde jednou a hodí to chybu tak to nemůže jít ani po druhé s potlačením výpisu chybové hlášky

možná by nebylo na škodu v případě, že dojde k chybě ji zalogovat (mysql_error a mysql_errorno)
Ben
Profil *
Oki, o todle mi šlo, to logování dělám, díky za radu
Joker
Profil
Ben:
Je toto dobré řešení?
Není.
Posílat v případě jakékoliv chyby ten samý dotaz znovu nemá cenu.
Ještě kdyby ten skript kontroloval kód vrácené chyby a snažil se reagovat na některé konkrétní, to by mohlo mít smysl, ale vždycky poslat tentýž dotaz znovu (což v 99,99% případů povede zase k téže chybě) ne.

Obecně záleží na situaci, jestli se při dané chybě dá pokračovat nebo nedá. Pokud dá, asi to může být nějak takhle, že se někde eviduje které záznamy se nepovedly a ty se pak řeší jinak.
Pokud nedá, tak se při první chybě skončí, asi nejlépe ROLLBACK transakce (pokud databáze umí transakce) a výjimka.
Ben
Profil *
Joker:
OK, děkuju.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0