dongyao5186
2010-03-25 05:43 阅读 19
已采纳

Cakephp - 检测是否无法连接到数据库并正常恢复

I have a few sites built with Cakephp. If any of these sites lose their connection to the database for whatever reason it does not handle it well. Basically it renders itself inside itself trying to display an error over and over until the browser crashes. The rendering itself inside itself is caused by the use of requestAction from elements.

What I want to know is how can I check if the database connection exists

I tried this in the app_controller before filter:

if(!ConnectionManager::getDataSource('default'))
 {
  die(); //this will be a message instead
 }

but it does not seem to work.

Thanks

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    douzhuoxia0587 douzhuoxia0587 2010-03-25 11:21

    Use the following code:

    <?php
    $filePresent = true;
    if (!file_exists(CONFIGS.'database.php')):
      echo '<span class="notice-failure">Database configuration file is not present. Please contact admin@website</span>';
      $filePresent = false;
    endif;
    if ($filePresent!=false):
      uses('model' . DS . 'connection_manager');
      $db = ConnectionManager::getInstance();
      @$connected = $db->getDataSource('default');
      if (!$connected->isConnected()):
        echo '<p><span class="notice-failure">Not able to connect to the database. Please contact admin@website</span></p>';
      endif;
    endif;
    ?>
    

    Here I'm printing messages (in those tags). You can replace the echo line with die().

    点赞 评论 复制链接分享
  • doudang1052 doudang1052 2017-01-05 04:25

    (Cakephp 3.x) Just follow the example given in PagesController's Home view:

    Basically it is:

        use Cake\Datasource\ConnectionManager;
    
        try {
            $connection = ConnectionManager::get('yourconnection');
            $connected = $connection->connect();
        } catch (Exception $connectionError) {
            //Couldn't connect
        }
        //connected
    
    点赞 评论 复制链接分享

相关推荐