错误报告和ERRMODE_EXCEPTION之间的区别

时间:2016-04-16 09:16:08

标签: php pdo

我真的无法理解为什么我们应该在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_reportingERRMODE_EXCEPTION的区别是什么?他们每个人的角色是什么?他们有什么不同吗?

1 个答案:

答案 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应用程序处于活动状态时关闭显示所有错误,同时记录它们以供开发人员参考。