我想知道为什么你会“抑制”PHP错误。我明显看到错误产生的额外警告线的区别,但抑制它是否好?
Access denied for user 'user'@'localhost' (using password: YES)
vs
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'user'@'localhost' (using password: YES) in (deleted) on line 8
Access denied for user 'user'@'localhost' (using password: YES)
如果是这样,我应该养成在我的PHP程序中在MySQL查询开始时输入@
的习惯吗?
答案 0 :(得分:7)
你应该积极不养成抑制错误的习惯。错误是有原因的。相反,在代码中正确和防御地处理它们,并不断完善代码,直到错误消失为止。
你应该做的事情如下:
$conn = mysql_connect($host, $user, $pass);
// Always test to see if your action/connection/whatever was successful
if (!$conn) {
// something went wrong. handle the error
// Display a message for the user, write a message to `error_log()`, whatever's appropriate
}
else mysql_select_db($dbname);
在生产系统上,您永远不应该显示错误,因为它可能会泄露您的代码和数据库的详细信息。相反,在php.ini或运行时关闭display_errors
:
// In development and production, make sure all errors are reported
error_reporting(E_ALL & E_STRICT);
// In development show all errors on screen so you handle them as they occur
ini_set('display_errors', 1);
// In production turn them off
ini_set('display_errors', 0);
事实上,使用@
进行错误抑制的次数是PHP不良做法的第二大投票in this classic question.