Názor k článku PHP okénko: Kontrola chyb od Jakub Vrána - Mrzí mě, že hned pět diskutujících (PD., Lukoko,...

  • Článek je starý, nové názory již nelze přidávat.
  • 26. 4. 2005 7:46

    Jakub Vrána

    Mrzí mě, že hned pět diskutujících (PD., Lukoko, Michaels, efesak, cpt_nemo) si v článku nevšimlo myšlenky, že ošetřovat chyby přímo v kódu není ve většině případů ten nejlepší způsob. Když se kód pro ošetření standardních chyb umístí do zvláštní funkce, jednak se tím zdroják zpřehlední a jednak získáme možnost ošetřovací kód měnit podle potřeby. Všechny zmíněné způsoby jsou jen variantou toho samého nešikovného přístupu:

    <?php
    if (!mysql_query("SELECT * FROM tabulka")) {
      echo "Chyba v SQL dotazu!\n";
    }
    
    $RS = @mysql_query($SQLText) or die("Chyba SQL dotazu");
    ?>
    

    Ošetření chyb mimo hlavní kód kromě už zmíněných výhod dává možnost zpracování chyb v závislosti na prostředí:

    <?php
    function mysql_q($query, $ignored = array()) {
      $result = mysql_query($query);
      if (!$result && !in_array(mysql_errno(), $ignored)) {
        if (DEBUG) {
          echo "Error in $query: " . mysql_error() . "\n";
        } else {
          // poslání mailem, zápis do logu, ...
        }
      }
      return $result;
    }
    ?>
    

    Podobný přístup je i využití direktivy mysql.trace_mode, která z SQL chyb vytvoří standardní PHP chyby, které můžeme ošetřovat stejným způsobem jako normální PHP chyby (v testovacím prostředí vypisovat, v provozním ukládat do logu).