如何使用Kohana 3 ORM处理Database_Exception

时间:2012-07-04 17:56:28

标签: php mysql kohana kohana-3 kohana-orm

以下是问题

有一个脚本,在X时间后(未知数量在5到40分钟之间)抛出以下错误: MySQL服务器已经消失其中Kohana变成 Database_Exception 2006 < / strong>因此,某些信息不会保存到数据库中。

以下是我认为可行的方法

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中刷新数据库的链接?

更多信息:

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个问题

  • 达到MYSQL配置的超时
  • 超出数据包大小
  • 丢包

如果您正在执行长插入,例如批量插入,如果没有为此配置数据库,则代码中的任何更改都不会产生任何影响。你可能会尝试重新配置你的MYSQL实例,然后排除MYSQL责任,然后你尝试修改你的代码(我怀疑是问题的根源)。重试保存不会有太大帮助,但要使数据库更加繁忙。

另一件事,如果您使用代理(如HAProxy),也要检查其超时。