2010-12-16 5 views
4

Possible Duplicates:
Reference - What does this symbol mean in PHP?
What does @ mean in PHP?Was macht der @ -Zeichen in PHP?

Ich habe eine Linie in meinem Code, der wie folgt aussieht:

@mysql_select_db ($ dbname) oder die ("Fehler: Kann nicht wählen Datenbank");

Es funktioniert, aber ich möchte wissen, was das @ tut und warum es da ist.

+2

In einem großen Zitat sah ich kürzlich, "es verhindert, dass Sie herausfinden, was mit Ihrem Programm falsch ist". Ich denke, es war Gordon ... –

+0

@ElYobo glaube nicht, dass es mich war, aber es ist viel Wahrheit drin – Gordon

+1

@Gordon, du hättest ruhig bleiben sollen und dann den Kredit genommen;) Es war irgendwo hier auf SO, aber ich kann Ich finde es jetzt nicht. –

Antwort

2

In diesem Fall unterdrückt die @ den regulären PHP-Datenbankverbindungsfehler (der möglicherweise vertrauliche Informationen enthält). Im Falle eines Verbindungsfehlers wird der "oder die" Teil ausgeführt, der mit einer allgemeinen Fehlermeldung fehlschlägt. Die Zeile wird wahrscheinlich von einem "schnellen und schmutzigen" Beispiel kopiert.

Die Verwendung des Fehlerunterdrückungsoperators @ wird als fehlerhafter Stil angesehen, insbesondere wenn andere Formen der Fehlerbehandlung fehlen. Es erschwert das Debugging - wie kann man Fehler erkennen, ohne dass es darauf hindeutet, dass es passiert ist? In einem Produktionssystem ist es besser, alle Fehler in einer Datei zu protokollieren und das Rendern von Fehlern auf der Seite zu unterdrücken. Sie können dies in der Datei php.ini oder (wenn Sie auf einem freigegebenen Host sind und keine Konfigurationsänderungen vornehmen dürfen) mit dem folgenden Code ausführen.

+1

@ unterdrückt * jeden * Fehler, nicht nur Datenbankverbindungsfehler. –

+0

Danke, ich habe meine Antwort bearbeitet, um dies zu reflektieren. – chiborg

13

Das Symbol @ unterdrückt alle Fehler und Hinweise für den vorhergehenden Ausdruck.

Sehen Sie diese Referenz: PHP Error Control Operators

PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.

1

Es unterdrückt alle Fehlerausgang. Im Allgemeinen sollten Sie es nicht verwenden, außer Sie haben einen guten Grund. Ich weiß nicht, warum es in dem Beispiel verwendet wird, das Sie gepostet haben, oder warum die Funktion stirbt() verwendet wird. Der Fehler sollte abgefangen und entsprechend verarbeitet werden. Die Auswahl kann aus verschiedenen Gründen fehlschlagen, einige sind möglicherweise wiederherstellbar. Wie keine Verbindung zur Datenbank hergestellt.