我在类构造函数中创建新的PDO连接,然后仅在该类中使用它。如果发生某些错误,我会收到致命错误,而不是PDOException
。
致命错误:带有消息的未捕获异常'PDOException' 'SQLSTATE [42S22]:列不是......
我的代码是:
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());
}
有可能吗?
答案 0 :(得分:2)
有可能吗?
当然。这实际上就是例外的目的。
我得到致命错误而不是PDOException。
这不是真的。你实际上得到了一个例外,虽然没有被捕获(反过来会导致致命的错误)。
关于您当前的错误 - 很可能是由其他一些代码块引起的。总是有一个带有异常的堆栈跟踪 - 因此,您可以轻松找到它。你可以在那里捕捉它。
但是,我建议不要手动捕捉它。最好创建一个异常处理程序并在一个地方捕获所有异常(除非你想以某种方式处理错误,这很少发生)