当我的应用程序启动时,“ping”我的数据库是一个好主意吗?

时间:2011-04-11 22:32:54

标签: php zend-framework zend-db

我最近的一个问题(here)询问了如何在Bootstrap文件中捕获错误(并使用ErrorController显示它们)。我使用的示例是在数据库实例化期间:如果Bootstrap中发生错误,它只会将错误转储到屏幕上而不调用ErrorController。

但是,比方说,在我的数据库实例化插件中,我有这个代码:

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
    $db = Zend_DB::factory("Pdo_Mysql", $this->config);
    Zend_Registry::set("db", $db);
}

即使没有连接数据库,也不会抛出任何错误。这是因为Zend_DB无需检查数据库是否存在,以免浪费资源和时间。

我的问题是我是否应该这样做:

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
    $db = Zend_DB::factory("Pdo_Mysql", $this->config);
    $db->getConnection();
    Zend_Registry::set("db", $db);
}

这样,任何连接问题都会在早期发现并显示出来。这是一个好主意吗?我的应用程序是否应该等到第一次使用时检查数据库连接是否存在?

1 个答案:

答案 0 :(得分:3)

我会在我的错误控制器中设置Zend_Db异常类型的特定处理。

PHP没有状态,因此每个页面请求都会发生应用程序的初始化。如果我的页面请求甚至不需要DB(例如,我的维护页面,错误页面等)怎么办?

最重要的是,在bootstrap期间正确处理无连接是什么?如何确保为呈现错误页面所需的任何其他资源都已完成引导?

然而,这只是我的偏好。