【问题标题】:How to suppress PHP Warnings with PDO如何使用 PDO 抑制 PHP 警告
【发布时间】:2018-07-11 16:37:08
【问题描述】:

我努力绕过 PDO 警告,但没有成功。

这是我的代码(文件名和参数被XXXXXX混淆):

try {
    ini_set('pdo_mysql.debug' , '0');

    $pdo = new PDO("mysql:host=XXXXXX;port=XXXXXX;dbname=XXXXXX", 'XXXXXX', 'XXXXXX', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $pdo->exec('SET session wait_timeout=1');

    $pdo->query('SELECT 1');
    echo "SELECT 1\n";

    sleep(2);

    $pdo->query('SELECT 1');
    echo "SELECT 1\n";
} catch (Exception $e) {
    echo "Exception: {$e->getMessage()}\n";
}

我尝试过使用和 w/o ini_set,我尝试过在构造函数、参数或两者中使用 PDO 错误模式(如本例所示),我也尝试过使用命名主机或其 IP 地址.

SET wait_timeoutsleep 只是为了帮助测试

无事可做,我总是得到相同的结果:

SELECT 1
PHP Warning:  PDO::query(): MySQL server has gone away in XXXXXX/test.php on line 19
PHP Stack trace:
PHP   1. {main}() XXXXXX/test.php:0
PHP   2. PDO->query() XXXXXX/test.php:19
PHP Warning:  PDO::query(): Error reading result set's header in XXXXXX/test.php on line 19
PHP Stack trace:
PHP   1. {main}() XXXXXX/test.php:0
PHP   2. PDO->query() XXXXXX/test.php:19
Exception: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

如您所见,异常已被捕获(最后一行),并且在捕获 PDOExceptionThrowable(带或不带反斜杠)时也已捕获。

我只是想抑制 PHP 警告,通常由于 ERRMODE_EXCEPTION 参数它不应该出现,但这个警告总是“弹出”。

关于上下文的一些事情:

  • 这部分代码仅用于测试,整个代码都在一个需要很多东西的类中,我不能不记录 PHP 警告
  • 在生产环境中,我们只有 PHP 警告(不是堆栈跟踪)
  • 代码在 Linux 服务器上的 PHP v7.0 中运行
  • 我不想使用@ 隐藏警告

谢谢

【问题讨论】:

    标签: php mysql pdo error-handling warnings


    【解决方案1】:

    我认为您的异常可以正常捕获,但您需要更改有关错误显示的设置:

    ini_set('display_errors', 0);
    

    你也可以在 php.ini 中设置

    【讨论】:

    • 你好@Kasia,这可能是一个选项(比使用@符号好一点)但我真的想使用一个“干净”选项,也就是说不仅隐藏警告,而且避免它(通常当错误模式设置为异常时不应显示警告)。事实上,这部分代码运行在一个不允许隐藏警告的非常敏感的上下文中
    • 在 prod 服务器上,您可能无论如何都希望将错误通过管道传输到日志文件中,因此仍然可以这样做,但只是不在浏览器中显示。不管怎样,我希望你能找到你需要的东西:)
    • 你是对的 ;) 这有点复杂,它适用于在 CLI 中运行的后台脚本,但你是对的。
    猜你喜欢
    • 2014-12-19
    • 1970-01-01
    • 2012-07-13
    • 2021-02-08
    • 1970-01-01
    • 2017-06-10
    • 2011-04-17
    • 2019-02-25
    相关资源
    最近更新 更多