CodeIgniter在使用PDO作为驱动程序时没有捕获数据库错误

时间:2013-06-01 02:06:44

标签: php codeigniter pdo

我正在使用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时,我是否运气不好,或者在使用带有CodeIgniter的PDO时是否需要更改一些其他配置设置?

1 个答案:

答案 0 :(得分:2)

如果您查找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驱动程序,我认为没有任何真正的优势选择这个优于mysql,反之亦然,因为无论如何你将以CI方式编写查询。