gpt4 book ai didi

php - 未捕获的 PDOException 显示用户名和密码

转载 作者:行者123 更新时间:2023-12-02 05:36:56 26 4
gpt4 key购买 nike

try {
self::$dbinstance = new PDO(
"mysql:host=$c[host];dbname=$c[dbname]", $c['user'], $c['password']
);

self::$dbinstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo "Errors" . $e->getMessage();
}

上面代码中,如果PDO连接主机失败,会出现 fatal error显示用户名和密码。

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003]
Can't connect to MySQL server on '172.25.102.65' (10060)' in
D:\xampp\htdocs\mytest\wh_client_2.1\classes\importmodule-class.php:33 Stack trace: #0
D:\xampp\htdocs\mytest\wh_client_2.1\classes\importmodule-class.php(33): PDO-
>__construct('mysql:host=172....', 'host', 'password') #1

一种可能的方法是转动 display_error=0关在 php.ini ,但是这样当我的主机没有响应时我将无法知道。

有没有办法修改错误信息?

最佳答案

错误处理和错误报告之间存在差异。

  • 错误处理 是防止您的最终用户看到任何堆栈跟踪、重要信息或自动生成的错误消息的过程。它还可以通过使用 try catch 块来修改脚本的运行方式。
  • 错误报告 定义给定脚本将报告哪些信息。

  • 为了正确处理错误,我认为 ini_set('display_errors',0);是更好的方法。您不希望屏幕上显示任何错误消息。

    但是,我想获得所有可能的错误信息,所以我使用 error_reporting(E_ALL); .

    错误写入文件 error_log 中,该文件通常与 index.php(或任何直接调用的 PHP 文件)位于同一级别。您也可以从 cPanel 访问它。

    您的错误可能未被捕获,因为您的代码位于命名空间中,而您想要捕获全局命名空间 PDOException .使用 \表明您正在寻找全局的脚本 PDOException .一旦发现错误,您可以使用 PDOException class 的常规方法回显您想要的内容。 .
    try {
    $db = new PDO (/*connection infos*/);
    }
    catch (\PDOException $e) {
    switch ($e->errorCode()) {
    case 'HY000':
    // Or whatever error you are looking for
    // here it's the general error code
    mail('your@email.com','connection problem',$e->getTraceAsString());
    $db = new PDO (/*rollback connection infos of a local database*/);
    break;
    }
    }

    这会向您发送一封邮件,其中包含错误的痕迹,防止您的用户在告诉您出现问题时看到它。

    这是 the reference对于 PDO 语句返回的错误代码。

    关于php - 未捕获的 PDOException 显示用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23571128/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com