Php 如何用kohana3orm处理数据库_异常

Php 如何用kohana3orm处理数据库_异常,php,mysql,kohana,kohana-3,kohana-orm,Php,Mysql,Kohana,Kohana 3,Kohana Orm,问题出在这里 有一个脚本在X个时间量(5到40分钟之间的未知量)后抛出以下错误:MySQL服务器已消失,Kohana将其变成数据库异常2006,因此一些信息未保存到数据库中 以下是我认为可行的方法 class Model_Bar extends ORM { protected $_belongs_to = array( 'foo' => array() ); public function save(){ //Extends the save method try {

问题出在这里

有一个脚本在X个时间量(5到40分钟之间的未知量)后抛出以下错误:MySQL服务器已消失,Kohana将其变成数据库异常2006,因此一些信息未保存到数据库中

以下是我认为可行的方法

class Model_Bar extends ORM {

protected $_belongs_to = array(
    'foo' => array()
);

public function save(){ //Extends the save method
    try {
        $result = parent::save(); //Try parent save
    }  catch (Database_Exception $e) { //Catch exception
        if ($e->getCode() == 2006) { //If exception code == 2006 then DB has gone away
            mysqli_ping(); //Try to refresh DB link
            $result = parent::save(); //Try parent save again
        } else { //Exception code != 2006
            throw new Exception($e); //Throw new DB exception
        }
    }
    return $result; // Return the result from parent::save()
    }
}
问题:如何在Kohana的ORM中刷新指向DB的链接?

更多信息:

  • 使用Kohana 3.0.8
  • (我不知道如何在科哈纳试一试)

谢谢

这两者都有问题

  • 已达到MYSQL配置的超时
  • 超出数据包大小
  • 数据包丢失
如果您正在执行一个长插入,比如大容量插入,如果您的数据库没有为此进行配置,那么代码中的任何更改都不会产生任何影响。您可以尝试重新配置您的MYSQL实例,然后排除MYSQL的责任,然后在您尝试修改代码之后(我怀疑这是问题的根源)。重试保存不会有多大帮助,但会使数据库更加繁忙


另一件事,如果您使用的是代理(如HAProxy),请检查该代理的超时情况。

您能不能在长时间处理之后、保存之前重新连接?这不是ORM问题-这是应用程序设计问题。ORM不太相关。@Petah,这正是我想要做的。这就是我扩展save方法的原因。“问题是我找不到办法来做这件事。”汤姆,我不同意。这是发生在科哈纳ORM内部的事情,所以我相信这是相关的。但是,感谢您抽出时间:)好吧,您可以不同意您想要的一切-就像我与BS 2000(大型机)上的人员和.NET中的程序员进行的讨论一样-处理db级错误不是一个工具决策,而是一个应用程序决策。是否重试?你传播错误了吗?你是做什么的?独立于所使用的技术。例如,我这里有一个应用程序,其中唯一有效的答案是“在损坏发生之前立即停止应用程序”和“立即触发看门狗关闭打开的操作”。