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

问题描述 投票:0回答:1

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

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

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

php mysql testing pdo error-handling
1个回答
2
投票

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

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

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

但是,解决方案非常简单

  • 为了避免在屏幕上显示any错误,只需告诉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());
}
© www.soinside.com 2019 - 2024. All rights reserved.