Auf eine SO-Frage, die ich hier zu einem Code gestellt habe, bei dem ich mir nicht sicher war, antwortete jemand: "Übrigens, dort gibt es einen schrecklichen Code: er verwendet häufig das Symbol zur Fehlerunterdrückung (@)."
Gibt es einen Grund, warum dies eine schlechte Praxis ist? Mit Dingen wie:
$db=@new mysqli($db_info) or die('Database error');
kann ich nur eine benutzerdefinierte Fehlermeldung anzeigen. Ohne Fehlerunterdrückung würde dann immer noch die typische PHP-Nachricht von:
Warnung : mysqli :: mysqli (): php_network_getaddresses: getaddrinfo fehlgeschlagen: Es ist kein solcher Host bekannt. in irgendeinem \ file \ path in Zeile 6
sowie 'Datenbankfehler'.
Ist die Fehlerunterdrückung immer schlecht, und wenn ja, was genau ist schlecht an den oben genannten?
Update: Der aktuelle Code, den ich verwende, ist:
or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b><br />Error occurred on line <b>' . __LINE__ . '</b> of <b>' . __FILE__ . '</b>' : ''))
Dadurch werden alle vorherigen Ausgaben entfernt und eine Fehlermeldung angezeigt. Die Tatsache, dass die Fehlermeldung keine Details darüber enthält, was genau passiert ist (was offenbar als Grund für die schlechte Fehlerunterdrückung vorgeschlagen wird), ist irrelevant.
or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b>' : ''))