首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Kohana中捕获数据库异常

问在Kohana中捕获数据库异常
EN

Stack Overflow用户
提问于 2010-04-18 23:00:46
回答 3查看 3.2K关注 0票数 2

我正在使用Kohana 2。我想捕获一个数据库异常,以防止在无法建立到服务器的连接时出现错误页面。

显示的错误是

代码语言:javascript
复制
system/libraries/drivers/Database/Mysql.php [61]:

mysql_connect() [function.mysql-connect]: Lost connection to MySQL server at
'reading initial communication packet', system error: 110

此时根本无法访问数据库服务器。

我是从一个模型开始做这个的。我都试过了

代码语言:javascript
复制
public function __construct()
{
    // load database library into $this->db
    try
    {
        parent::__construct();
    }
    catch (Exception $e)
    {
        die('Database error occured');
    }
}

以及

代码语言:javascript
复制
try
{
    $hoststatus = $this->db->query('SELECT x FROM y WHERE z;');
}
catch (Exception $e)
{
    die('Database error occured');
}

...but这些方法似乎都不起作用。似乎没有异常从主模型传递过来。有没有其他方法可以捕获数据库错误并使用我自己的错误处理?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-06 16:52:42

Kohana 2不会将错误转换为异常。您需要附加自己的错误处理程序,或者使用error_reporting() (临时)关闭错误,然后自己进行某种处理。

票数 1
EN

Stack Overflow用户

发布于 2010-04-20 00:28:03

您可以捕获异常,但您可能尝试在错误的位置捕获它。试图捕获这种低级别异常的问题是,它可以从许多不同的来源产生。

例如,如果您为您的会话使用数据库驱动程序,该异常将从会话库中的数据库驱动程序实例化中抛出(这是在对会话的调用中实例化的,这可能会在您实例化任何模型之前发生)。

捕获该异常可能发生在模型中,但更有可能发生在其他来源-在这种情况下,您可能必须扩展一些库,或者确保将基本模型parent::__construct调用和会话库包装在try-catch块中。

(我个人会扩展模型库来做到这一点,而不是把它放在一个基本模型中)

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2010-04-18 23:19:56

我不知道Kohana,但是try .. catch块不会捕获正常的错误,只能捕获Exceptions。你确定Kohana抛出Exceptions到你期望接收Exceptions的地方吗?

根据您的评论编辑:

首先,在生产环境中(即您的活动应用程序),您应该始终禁止在屏幕上显示PHP错误。只有在开发环境中通知开发人员时,才能在屏幕上显示这些错误。但是,您的活动应用程序的访问者无权知道/读取PHP错误,因为它可能会泄露有关您的环境的敏感信息。但是,您应该将错误记录到日志文件中。

此外,我只是快速浏览了一下Kohana,确实看到这里和那里抛出了异常,但它似乎没有以一致的方式做到这一点。

如果你想把php错误当做异常来处理,看看this documentation中的example #1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2662645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档