CodeIgniter - 如何捕获数据库错误?
有没有办法让CI在遇到数据库错误时抛出异常,而不是显示如下消息:
发生数据库错误错误号:1054 “where 子句”中存在未知列“foo” SELECT * FROM (
FooBar
) WHEREfoo
= '1'
注意:我只希望这种情况发生在一个控制器中。在其他控制器中,我很高兴它显示数据库错误消息。
Is there a way to make CI throw an exception when it encounters a DB error instead of displaying a message like:
A Database Error Occurred Error Number: 1054
Unknown column 'foo' in 'where clause' SELECT * FROM (FooBar
) WHEREfoo
= '1'
NOTE: I only want this to happen in one controller. In the other controllers, I'm happy for it to display the DB error messages.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
使用
error()
方法:对于 CodeIgniter 2,您可以使用以下现已弃用的函数:
Use
error()
method:For CodeIgniter 2, you can use the following functions which are now deprecated:
也许这个:
Maybe this:
在 Codeigniter 3.0 (CI3) 中,您所要做的就是
$this->db->error()
In Codeigniter 3.0 (CI3), all you have to do is
$this->db->error()
您必须在 config/database.php -> 中关闭数据库的调试
这更有利于您网站的安全。
You must turn debug off for database in config/database.php ->
It is better for your website security.
我知道这个线程很旧,但以防万一其他人遇到这个问题。这是我在不接触 CI db 类的情况下使用的技巧。将调试保留在错误视图文件中,并引发异常。
因此,在您的数据库配置中,您有:
然后在您的数据库错误视图文件中,我的位于
application/errors/error_db.php
中,将所有内容替换为以下内容:由于将调用视图文件,因此错误总是会作为异常抛出,您稍后可以为不同的环境添加不同的视图。
I know this thread is old, but just in case there's someone else having this issue. This is a trick I used without touching the CI db classes. Leave your debug on and in your error view file, throw an exception.
So in you db config, you have :
Then in your db error view file, mine is in
application/errors/error_db.php
replace all content with the following:Since the view file will be called, the error will always get thrown as an exception, you may later add different views for different environment.
一个对我有用的例子:
An example that worked for me:
我为此创建了一个简单的库:
示例查询:
我可以在控制器中以这种方式捕获它:
I have created an simple library for that:
The example query:
And I can catch it this way in my controller:
将此代码放入 application/core 文件夹中名为 MY_Exceptions.php 的文件中:
这将使所有 Code Igniter 错误被视为异常 (CiError)。然后,打开所有数据库调试:
Put this code in a file called MY_Exceptions.php in application/core folder:
It will make all the Code Igniter errors to be treated as Exception (CiError). Then, turn all your database debug on:
使用它
可以更好地发现错误。完成您的网站后。
关闭错误消息
使用它
您将在配置文件夹的database.php中更改它
Use it
It is better for finding error.After completing your site.
Close the error messages
using it
You will change it in your config folder's database.php
禁用错误调试。
Disable debugging of errors.
如果使用 PDO,除了上述所有答案之外。
我默默地记录我的错误,如下所示
If one uses PDO, additional to all the answers above.
I log my errors silently as below
在 sybase_driver.php
在同一个 sybase_driver.php 文件中添加并修改以下方法
在控制器的功能中实现。
在日志中您可以查看数据库服务器发送的代码和消息。
In sybase_driver.php
Add and modify the following methods in the same sybase_driver.php file
Implement in the function of a controller.
In the log you can check the codes and messages sent by the database server.