【发布时间】:2013-06-02 13:37:26
【问题描述】:
我正在类构造函数中创建新的 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());
}
那么有可能吗?
【问题讨论】:
-
应该是可以的。 PDO 正在使用该功能(以及其他功能)来宣传自己。
-
@11684 但正如我所说 - 我得到的只是致命错误
-
也许这与您自己没有调用
__construct()方法有关。如果将代码从构造函数移动到实例方法(例如foo),然后在 try 块中执行此操作:$helper = new Helper(); $helper->foo($config),会发生什么情况。 -
这个 Helper 类的目的是什么?是数据库助手还是别的什么?
-
@11684 我在构造函数中还有其他异常,例如
InvalidArgumentException,如果配置为空,它可以正常工作。