Php 是否可以在其他范围内使用PDOException?

Php 是否可以在其他范围内使用PDOException?,php,exception,pdo,Php,Exception,Pdo,我正在类构造函数中创建新的PDO连接,然后仅在该类中使用它。如果发生错误,我会得到致命错误,而不是PDOException 致命错误:未捕获的异常“PDOException”带有消息 'SQLSTATE[42S22]:列不是fou 我的代码是: class Helper { private $_db; function __construct($config = FALSE) { $this->_db = new PDO($config['dat

我正在类构造函数中创建新的PDO连接,然后仅在该类中使用它。如果发生错误,我会得到致命错误,而不是
PDOException

致命错误:未捕获的异常“PDOException”带有消息 'SQLSTATE[42S22]:列不是fou

我的代码是:

class Helper
{
    private $_db;

    function __construct($config = FALSE)
    {

        $this->_db = new PDO($config['database']['dsn'], $config['database']['username'], $config['database']['password'], $config['database']['options']);
        $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
}

$config = array(
    'database' => array(
        'dsn' => 'mysql:host='.$dbhost.';dbname='.$dbname,
        'username' => $dblogin,
        'password' => $dbpass,
        'options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
        )
    )
);

try {
    $helper = new Helper($config);
} catch (PDOException $error) {
    die('Database Error: ' . $error->getMessage());
}
那有可能吗

那有可能吗

当然。实际上,这正是例外的目的

我得到的是致命错误而不是异常

事实并非如此。您实际上会得到一个异常,尽管是未捕获的异常(这反过来会导致致命错误)

关于您当前的错误-很可能是由其他代码块引起的。总是有一个堆栈跟踪提供了一个异常-因此,您可以很容易地找到它。那你可以在那里买到


但是,我建议不要手动捕捉它。最好创建一个异常处理程序,并在一个位置捕获所有异常(除非您希望以某种方式处理错误,这很少发生)

这应该是可能的。PDO正在用这个特性(以及其他特性)提升自己。@11684但是正如我所说的-我只得到了致命的错误,也许这与您自己没有调用
\uu construct()
方法有关。如果将代码从构造函数移动到实例方法(例如,
foo
),然后在try块中执行此操作,会发生什么情况:
$helper=newhelper()$helper->foo($config)
。这个helper类的用途是什么?是数据库助手还是其他什么?@11684我在构造函数中还有其他异常,例如
InvalidArgumentException
,如果配置为空,它可以正常工作。问题是我定义了异常,但是它作为未定义的
未捕获异常'PDOException'
激发,所以我需要修复它并捕获该异常,很好地捕获它。顺便问一下,你为什么想要它?PDO错误很少需要捕获。