微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – CodeIgniter中的异常处理

最近,我正在使用CodeIgniter Framework学习PHP.我正在处理异常处理,但有一件事让我感到惊讶的是,当database.PHP设置中存在db_debug = TRUE时,异常处理不适用于数据库错误.

如果db_debug = FALSE,我可以抛出并捕获错误,但是当它为TRUE时,它会直接显示包含数据库错误页面.

这是我的代码

在模型中:

    $this->db->insert('tbl_name',$data);
    if (strpos($this->db->_error_message(),'constraint_name') !== FALSE)
    {
        throw new UniqueConstraintException($this->db->_error_message()); // UniqueConstraintException is customized excpetion
    }

在控制器中:

        try
        {
             //calling the method from model having above code
        }
        catch(UniqueConstraintException $ex)
        {
              echo "There is already item with same item name";
        }
        catch(Exception $ex)
        {
             echo $ex->getMessage();
        }

即使存在db_debug = TRUE设置,我是否可以对数据库错误实现异常处理?

解决方法:

CodeIgniter的人对oop一无所知.当你查看代码时,你会在数据库驱动程序中找到这样的事情一百万次(也不知道任何关于DRY的事情):

if (<some condition>) {
    if ($this->db_debug) {
        log_message('error', 'Invalid query: '.$sql);
        return $this->display_error('db_invalid_query');
    }
    return FALSE;
}

所以不,你不能禁用这个“功能”.但是你可以extend the class CI_DB_driver摆脱这个问题,但是由于缺少DRY代码,你将不得不覆盖这个类的几乎所有内容……

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐