我真的无法理解为什么我们应该在PHP数据对象PDO连接文件的顶部设置:
error_reporting(E_ALL);//When we are in a development process;
或者
error_reporting(0);//To shut off all errors when web app is live
在我们创建连接参数的同时,我们应该添加:
setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
我的问题是,我们在同一个文件中使用error_reporting
和ERRMODE_EXCEPTION
的区别是什么?他们每个人的角色是什么?他们有什么不同吗?
答案 0 :(得分:2)
首先,最初的陈述是错误的。
error_reporting(E_ALL);
在所有环境中,应始终相同。
在考虑两者之间的区别时,error_reporting()
是一个 PHP 范围相关的设置,负责所有PHP错误,
setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
仅适用于PDO。
因此,您可以说明为什么必须同时使用它们:error_reporting(E_ALL)将使您了解所有PHP错误,例如缺少变量或文件系统权限问题。虽然PDO的setAttribute只是告诉PDO报告自己的错误,所以通过error_reporting(E_ALL)使它们可用。
正确的设置是:
error_reporting(E_ALL);
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
然后
ini_set('display_errors', 1);
当我们处于开发过程中时;
ini_set('display_errors', 0);
ini_set('log_errors', 1);
在Web应用程序处于活动状态时关闭显示所有错误,同时记录它们以供开发人员参考。