php pdo错误处理模式,php – 使用PDO进行错误处理的最佳实践

这是一个非常好的问题,但是一开始就有一个错误的前提:您正在为PDO分离错误报告,这些报告与站点范围的错误报告分开.这没什么意义:每种方式的PDO错误都与其他错误相同 – 文件系统错误,HTTP错误等等.因此,没有理由建立仅PDO错误报告.您所需要的只是正确设置站点范围的错误报告.

关于php.ini不可访问性还有一个错误的假设:您始终可以使用ini_set()函数设置任何配置指令.因此,将error_reporting设置为灾难性级别0并不是一个单一的原因.

要回答你剩下的问题,你需要的只是一点常识.

A great number of websites say you should echo your error messages in your catch block.

A large number of users on SO say that you should never echo error messages due to security risks.

你觉得自己怎么样?向用户显示系统错误消息是否有用?对恶意用户显示系统内部是否有用?

Others are recommending logging it to a log file outside the document root.

你有什么异议吗?

Some use error handling to log it to a SQL table.

您是否认为将数据库错误记录到数据库中这是一个相当矛盾的想法?

What is the best practice for handling errors in general in PHP?

您已经显示它:在开发中显示并登录prod.所有这些都通过几个简单的配置选项在站点范围内进

What is the best practice for handling errors in the catch-block?

根本不要使用try-catch块进行错误报告.对于应用中的每个查询,您不会为友好的错误消息编写一个catch块,因为在另一个答案中建议,是吗?

因此你的代码必须是

// Error handling

error_reporting(-1);

ini_set('display_errors',0);

ini_set('log_errors',1);

// Get credentials from outside document root

require_once('../settings.php');

// Tests connection to database

$dbh = new PDO(

sprintf(

'mysql:host=%s;dbname=%s;port=%s;charset=%s',

$settings['host'],

$settings['name'],

$settings['port'],

$settings['charset']

),

$settings['username'],

$settings['password']

);

// Prevents emulated prepares and activates error handling

// PDO::ERRMODE_EXCEPTION

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

现在回答你在评论中提出的问题.

自定义错误屏幕是一个非常不同的问题,你的代码特别糟糕.既不应该是404错误也不应该使用HTTP重定向(这对SEO来说非常糟糕).

要创建自定义错误页面,您必须使用Web服务器功能(首选)或PHP脚本中的错误处理程序.

当遇到致命错误(并且未捕获的异常为1)时,PHP不响应200 OK HTTP状态但具有5xx状态.每个Web服务器都可以捕获此状态并显示相应的错误页面.例如.对于Apache来说就是这样

ErrorDocument 503 server_error.html

在哪里你可以写任何你想要的借口.

或者您可以在PHP中设置一个自定义错误处理程序,它也可以处理所有PHP错误,在我写的关于此事的文章中可以看到一个例子:The (im)proper use of try..catch.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值