无法捕捉到我的 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 错误的主要内容,如果未能解决你的问题,请参考以下文章
Mocha / Chai expect.to.throw 没有捕捉到抛出的错误