【问题标题】:catch does not get activated when pdo connect gets an error [duplicate]当 pdo connect 出错时,catch 没有被激活 [重复]
【发布时间】:2020-04-23 09:43:55
【问题描述】:

尝试远程连接到数据库。有谁可以的ip过滤器。每当无法连接错误的用户显示在页面中时,错误后的所有内容都将停止工作。我试图将错误传递给变量(使用 try catch 和其他方法)但没有任何反应。 catch 部分就像被忽略了。

我尝试了所有 mysqli_report 标志

如果发生这种情况,我如何确保用户不会收到错误消息?我需要将错误消息加载到变量中,这样我就可以随时随地加载错误消息,而不是抛出错误并关闭操作。

还刚刚注意到该错误向用户显示了数据库的密码、主机和用户名登录详细信息。所以禁用它很重要

更新:

当前代码仍然无法正常工作

try {
    $conn = new \PDO(
        "mysql:host=$hostname_db;dbname=myDB",
        $username_db, $password_db,
        [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]
    );
} 
catch(PDOException $e)
{
    $err = $e->getMessage();
}
catch(Exception $e)
{
    $err = $e->getMessage();
}

显示的错误(大部分):

【问题讨论】:

  • 我能想到的唯一原因就是上面的链接
  • 完美运行!谢谢你。我什至没有注意到我错过了\

标签: php mysql pdo


【解决方案1】:

您可以在创建实例时直接传递选项。使用\ 确保使用正确的命名空间。

try {
    $conn = new \PDO(
        "mysql:host=$hostname_db;dbname=myDB",
        $username_db, $password_db,
        [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]
    );

    echo "Connected successfully";
} 
catch(\PDOException $e)
{
    $err = $e->getMessage();
}

【讨论】:

  • 没有用。用户仍然收到错误,整个页面停止处理,刚刚注意到,它甚至显示登录详细信息到数据库(密码、主机、用户名)。
  • 请查看更新的答案。您需要在创建新实例时直接设置属性。稍后再设置,为时已晚。
  • 可惜现在还不算晚
  • 谢谢,但遗憾的是这也不起作用。我附上了一张用户(谁的 ip 不在允许的访问列表中)收到的照片。
  • 尝试在异常类型前加一个斜线。可能是命名空间问题catch(\PDOException $e)catch(\PDO::PDOException $e)
猜你喜欢
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2019-08-26
  • 1970-01-01
相关资源
最近更新 更多