CodeIgniter在使用PDO作为驱动程序时不捕获DB错误


CodeIgniter not catching DB errors while using PDO as driver

我正在使用CodeIgniter 2.1.3,并且我正在使用带有PDO的活动记录类作为我的数据库驱动程序。

我遇到了一个问题,CodeIgniter没有报告错误的更新语句。我可以编写一个明显违反重复键或列名不正确的查询,但是CodeIgniter没有给出任何错误:

echo $this->db->_error_message(); //returns nothing
echo $this->db->_error_number();  //returns '0000'

然而,一旦我切换到使用MySQL作为驱动程序,我收到错误消息。

我甚至尝试过$this->db->query(.... //violating statement绕过活动记录类,没有运气和更多的错误。

我有$db['default']['db_debug'] = TRUE;

我不走运使用PDO,或者有一些额外的配置设置,需要改变时使用PDO与CodeIgniter?

如果您查找PDO驱动程序,您可以看到PDO连接是使用PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT完成的,并且没有抛出任何错误。

一般情况下,你希望PDO抛出异常,在这种情况下,你传递下面的连接选项。

array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false
);

如果您想使用PDO,请直接使用PDO。PDO是一个很好的抽象层。如果你打算使用CI DB Driver,我看不出选择它比mysql有什么真正的优势,反之亦然,因为无论如何你都会用CI的方式写你的查询。