Ejemplo n.º 1
0
 /**
  *  DBオブジェクトを返す
  *
  *  @access public
  *  @param  string  $db_key DBキー
  *  @return mixed   Ethna_DB:DBオブジェクト null:DSN設定なし Ethna_Error:エラー
  *  @todo   この中でnewしないでclass factoryを利用する
  */
 public function getDB($db_key = "")
 {
     $null = null;
     $db_varname = $this->_getDBVarname($db_key);
     if (Ethna::isError($db_varname)) {
         return $db_varname;
     }
     if (isset($this->db_list[$db_varname]) && $this->db_list[$db_varname] != null) {
         return $this->db_list[$db_varname];
     }
     $dsn = $this->controller->getDSN($db_key);
     if ($dsn == "") {
         // DB接続不要
         return $null;
     }
     $dsn_persistent = $this->controller->getDSN_persistent($db_key);
     $class_factory = $this->controller->getClassFactory();
     $db_class_name = $class_factory->getObjectName('db');
     // BC: Ethna_DB -> Ethna_DB_PEAR
     if ($db_class_name == 'Ethna_DB') {
         $db_class_name = 'Ethna_DB_PEAR';
     }
     if (class_exists($db_class_name) === false) {
         $class_factory->_include($db_class_name);
     }
     $this->db_list[$db_varname] = new $db_class_name($this->controller, $dsn, $dsn_persistent);
     $r = $this->db_list[$db_varname]->connect();
     if (Ethna::isError($r)) {
         $this->db_list[$db_varname] = null;
         return $r;
     }
     register_shutdown_function(array($this, 'shutdownDB'));
     return $this->db_list[$db_varname];
 }