【问题标题】:Try catch with PHP generate error尝试使用 PHP 捕获生成错误
【发布时间】:2016-04-29 00:51:18
【问题描述】:

我是 PHP 新手。当我尝试它时,我预计 $e 变量中的所有警告和错误。他们登录$e,但也在屏幕上输出。

我目前的解决方案是在$db 之前添加@,以防止屏幕上弹出警告。有更好的解决方案吗?我的感觉有点hacky。

<?php
function db() {
    $db = array();
    try {
        @$db = new Database(array(
            'type'     => 'mysql',
            'host'     => 'localhosts',
            'database' => 'megastore',
            'user'     => 'root',
            'password' => ''
        ));
    } catch (Exception $e) {
        echo $e;
    }
    return $db;
}

【问题讨论】:

  • 异常和错误不是一回事:try/catch 将捕获异常,而不是错误,除非您明确设置了错误处理程序来将错误转换为异常
  • 您使用的是什么数据库扩展? mysql_mysqli_PDO?
  • v7 中的错误处理已更改:php.net/manual/en/class.throwable.php
  • @RajdeepPaul 不要全面禁止@。示例:$result = @file_put_contents("file.txt","derp"); if( !$result) presentUsefulErrorMessage();。适当的错误处理程序绝对是个好主意,但有时您需要本地化错误处理,而没有@... 至少在 PHP7 之前是不可能的。

标签: php database exception try-catch


【解决方案1】:

使用静音运算符不是一个好主意。
您可以使用error_reporting() 仅显示您想要的内容,或者您​​可以将 display_error(使用ini_set() 或从 php.ini)设置为 false,这样错误就不会显示在屏幕上。
编辑:
这两个选项不一样,但也许你可以得到相同的结果。 有关更多信息,请阅读 php 手册中的链接。

【讨论】:

  • 谁能确认这是一个比@更好的主意,并且在这种情况下这是最好的主意?
  • 请不要使用 mysql_ 数据库扩展,它已被弃用(在 PHP7 中永远消失了)特别是如果您只是学习 PHP,请花精力学习 PDOmysqli_ 数据库扩展, and here is some help to decide which to use
  • @RiggsFolly github.com/getkirby/kirby/issues/360 "数据库类已经围绕 PDO 构建。旧的 mysql_ 扩展没有使用。"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 2011-03-21
相关资源
最近更新 更多