PHP Coding Standard

Logo: PHP
35. Empfehlung 7: Debug-Ausgabe von Anfang an einbinden

Man sollte sich von Anfang an auf mögliche Fehler im eigenen Skript vorbereiten und sich darauf vorbereiten.

Ungültig
   $update_user_login = "UPDATE user
   SET Password = PASSWORD('do_not_share')
   WHERE User = 'mysql_user'";

   mysql_query($update_user_login);

Neben der Tatsache, dass der String nicht mit Hochkommata definiert wurde, fehlt für den Befehl mysql_query jegliche Debug-Ausgabe. Steht Wert display_errors auf "off", wird kein Fehler ausgegeben, obwohl der UPDATE möglicherweise fehlschlägt. Diese Einstellung wird oft auf Produktionsservern verwendet. Zum Beispiel installiert Strato einen PHP-Webserver mit "display_errors=off".

Gültig
   $important_value = true_or_false(); // returns TRUE or FALSE
   echo '&gt;' . $important_value . '&lt;'; // DEBUG output: ">1<" or "><"

   $update_user_login = 'UPDATE user
      SET Password = PASSWORD("do_not_share")
      WHERE User = "mysql_user"';

   mysql_query($update_user_login)
      or die('Error on UPDATE:<br>' . mysql_error() . '<br> Query: <pre>' . $update_user_login . '</pre>');

FALSE ist nicht identisch mit 0. Deswegen sollte für FALSE oder Variablen, die möglicherweise nicht definiert sind, immer die Ausgabe auch "><" enthalten, um Verwirrung schon im Vorfeld zu vermeiden.

Das Update-Statement wird jetzt nicht mehr geparst, weil es in Hochkommata steht. Auch wenn "display_errors=off" gesetzt sein sollte, wird jetzt eine Fehlermeldung mit die ausgegeben. Die Debug-Ausgabe enthält den MySQL-Fehler und das komplette SQL-Statement. Das ist besonders dann praktisch, wenn das SQL-Statement viele Variablen enthält. Der PRE-Tag ist vor allem bei längeren SQL-Anweisungen hilfreich, die sich über mehrere Zeilen erstrecken.