错误报告和ERRMODE_EXCEPTION之间的差异


Difference between error reporting and ERRMODE_EXCEPTION

我真的不明白为什么我们应该在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?他们每个人的角色是什么?他们有什么不同吗?

首先,初始语句是错误的。

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应用程序运行时显示所有错误,同时记录这些错误以供开发人员参考。