Exemplo n.º 1
0
 private function db($type)
 {
     if (!\in_array($type, array('reader', 'writer'))) {
         ApiServerException::throwException('获取DB的参数只能是reader和writer', ApiServerException::ERROR_CODE_RUNTIME_EXCEPTION);
     }
     /*
      * 首先检查对应的连接是否已经被初始化,如果被初始化了,直接返回
      */
     if ($type == 'reader' && !empty($this->dbReader)) {
         return $this->dbReader;
     }
     if ($type == 'writer' && !empty($this->dbWriter)) {
         return $this->dbWriter;
     }
     $dbConfig = ApiConfig::getDBConfig();
     if ($type == 'reader') {
         if (!isset($dbConfig['read']) || !isset($dbConfig['write'])) {
             $this->dbReader = $this->getDb($dbConfig);
             return $this->dbReader;
         } elseif (isset($dbConfig['pool']) && $dbConfig['pool']) {
             $dbReaderConfig = $dbConfig['read'][\rand(0, \count($dbConfig['read'] - 1))];
             $this->dbReader = new DBPoolConnection($dbReaderConfig['dns'], $dbReaderConfig['username'], $dbReaderConfig['password'], $dbReaderConfig['charset'], isset($dbReaderConfig['options']) ? $dbReaderConfig['options'] : array());
             return $this->dbReader;
         } else {
             $dbReaderConfig = $dbConfig['read'][\rand(0, \count($dbConfig['read'] - 1))];
             $this->dbReader = new DBConnection($dbReaderConfig['dns'], $dbReaderConfig['username'], $dbReaderConfig['password'], $dbReaderConfig['charset'], isset($dbReaderConfig['options']) ? $dbReaderConfig['options'] : array());
             return $this->dbReader;
         }
     }
     if ($type == 'writer') {
         if (!isset($dbConfig['write']) || !isset($dbConfig['read'])) {
             $this->dbWriter = $this->getDb($dbConfig);
             return $this->dbWriter;
         } elseif (isset($dbConfig['pool']) && $dbConfig['pool']) {
             $this->dbWriter = new DBPoolConnection($dbConfig['write']['dns'], $dbConfig['write']['username'], $dbConfig['write']['password'], $dbConfig['write']['charset'], isset($dbConfig['write']['options']) ? $dbConfig['write']['options'] : array());
             return $this->dbWriter;
         } else {
             $this->dbWriter = new DBConnection($dbConfig['write']['dns'], $dbConfig['write']['username'], $dbConfig['write']['password'], $dbConfig['write']['charset'], isset($dbConfig['write']['options']) ? $dbConfig['write']['options'] : array());
             return $this->dbWriter;
         }
     }
 }