测试PDO错误处理:如何强制数据库连接错误?

时间:2019-10-02 15:05:16

标签: php mysql testing pdo error-handling

有什么办法可以强制数据库连接错误,以便我可以测试PHP代码的错误处理?我们知道,对于PDO,存在巨大的风险,即错误的错误处理可能导致完整的追溯记录显示在屏幕上,从而可能泄露数据库的用户名和密码(如php.net » pdo connections所警告)。

我一直试图故意强迫这种情况发生(通过重命名为虚构的数据库表等),但是我还没有得到结果。还有其他模拟数据库问题的方法吗?

我在运行Apache的共享主机上具有Cpanel访问权限。

1 个答案:

答案 0 :(得分:4)

仅提供不正确的凭据。重命名表几乎没有帮助,因为连接中不涉及表。改为更改hostusernamepassword

  

错误的错误处理可能会导致完整的追溯轨迹显示在屏幕上

这是一个非常适当的问题。

但是,解决方案非常简单

  • 为了避免在屏幕上显示任何错误,只需告诉PHP这样做,请将display_errors配置指令设置为0。
  • 为了避免将数据库凭据泄漏到堆栈跟踪中(即使不显示,进入日志也没有多大好处),只需捕获异常并抛出一个全新的异常,因为它将有效擦除堆栈跟踪并就像我的文章How to connect with PDO
  • 中所示,创建一个新的空对象

基本上您需要

try {
     $pdo = new \PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}