我应该使用try / catch子句在实际站点上编写PDO吗?
如果我使用try / catch子句来编写它,所有错误的详细信息将显示在网页上。
为了防止这种情况发生,如何在不在网页上显示错误的情况下知道哪些错误?
答案 0 :(得分:2)
这是一个非常好的问题,而且 - 令我完全惊讶的是 - 这是一个非常罕见的问题。好像没有开发人员在运行现场网站。我们在这里得到的所有答案仅仅是这个令人惊讶的陈述的证据。
我应该使用try / catch子句在现场网站上编写PDO吗?
如果我使用try / catch子句编写它,所有错误详细信息将显示在网页上。
实际上并不是因为try-catch而是因为你自己在那个块中回应它们。但无论如何,你也不应该使用那个块。
为防止发生这种情况,如何在不在网页上显示错误的情况下了解错误?
你必须让它们被记录下来。为此,您不应该首先使用try-catch。尽管网络上存在所有错误的示例,但此运算符与报告错误几乎没有关系,并且必须用于处理错误,而不是报告它们。< / p>
令人惊讶的是,PHP非常擅长错误记录。你不会相信我,但它本身可以处理这么费力的任务。不要将每个sql语句包装在try-catch中,而是将它们单独留下。如果出现错误,将抛出异常,但未捕获的异常是致命错误。对于实时站点,您应该已经设置了错误记录模式。表示您的PDO错误也将被记录。
因此,要让自己知道发生了什么,您只需要查看错误日志。
简而言之,您不应将PDO错误视为特殊内容。无论哪种方式,它都是代码中发生的另一个错误。与内存溢出错误,或文件未找到错误或权限被拒绝错误完全相同。 PDO错误没有特殊含义,没有任何理由以任何特殊方式处理它们。只需将它们视为您网站中的任何其他错误即可。在开发环境中愉快地在屏幕上回显它们以便于调试,而在实时站点上禁用错误显示并启用错误记录,并且您已设置。即。
用于开发服务器:
error_reporting(E_ALL);
ini_set('display_errors',1);
ini_set('log_errors',1);
而现场直播
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);