无法捕捉到我的 mysql 错误

Posted

技术标签:

【中文标题】无法捕捉到我的 mysql 错误【英文标题】:Can't catch my mysql errors 【发布时间】:2015-07-21 07:02:40 【问题描述】:

我在 php 中为我的服务器端使用 codeigniter。

我在我的用户表上设置了我的电子邮件字段唯一。 问题是,无论我尝试什么,我都无法捕获 mysql 在尝试插入重复电子邮件时生成的错误。

我在我的模型中尝试了什么:

function insert($arr) 

    $query=  $this->CI->db->insert('user', $arr);
    if($query)
        return $this->CI->db->insert_id();
     else 
        $msg = $this->CI-db->_error_message();

    return  $msg;

    


问题是一切都很好,直到我得到一个副本并且我实际上在 $msg 中什么都没有。我知道调试是从数据库配置文件中打开的。

【问题讨论】:

你的 codeigniter 版本是多少? 3.0.0 - 我从 2.2 升级 【参考方案1】:

如果您的数据库配置'db_debug' => TRUE,,您的代码将退出并显示错误消息,您将无法到达$msg = $this->CI-db->_error_message(); 这一行。

所以要捕捉到你需要设置的错误信息。

db_debug' => FALSE

在 CI-2 上,您的上述代码将起作用。See more at this question

但在 CI-3 中,这些功能不可用,它会产生 php undefined method 错误。 CI-3 有一个方法display_error。你可以检查一下。

我的解决方案:如果你想要错误,你可以使用这条线得到它

$msg = $this->db->conn_id->error_list;

这将为您提供数组形式的错误列表。但请记住,您需要设置db_debug' => FALSE

【讨论】:

当我尝试返回 error_list 时如何使用它,我得到“消息:数组到字符串的转换”。我只想退回它并打印到屏幕上。 是的,它返回所有错误的数组。如果你想要最后一个错误,你可以使用$this->db->conn_id->error,你的情况应该是$this->CI->db->conn_id->error @ShaifulIslam 知道为什么 db_debug 'production' ENVIRONMENT 默认值 ('db_debug' => (ENVIRONMENT !== 'production') 在新下载的 CI v3 中设置为 FALSE?我看到了设置它为 false 将显示 db 错误的更多详细信息,这在生产中是不应该的,对吧?我很困惑,因为在解释变量 (config/database.php): ['db_debug'] TRUE/FALSE - 是否应该显示数据库错误. 但实际上,FALSE 显示的是数据库错误。 db_debug' => TRUE 显示错误。 FALSE 不显示错误。 ENVIRONMENT !== 'production' 为真,因为默认环境是开发环境并显示错误。显然您不想在生产环境中显示错误。

以上是关于无法捕捉到我的 mysql 错误的主要内容,如果未能解决你的问题,请参考以下文章

无法捕捉 OpenGL 和顶点数组对象的错误

ios的app无法捕捉js异常信息

Mocha / Chai expect.to.throw 没有捕捉到抛出的错误

s3.getObject().createReadStream() :如何捕捉错误?

设置 xact_abort 并尝试一起捕捉

无法捕捉 MediaPlayer 的 IllegalStateException