Example #1
0
 /**
  * 取得数据库类实例
  * @static
  * @access public
  * @return mixed 返回数据库驱动类
  */
 public static function getInstance($db_config = '')
 {
     $config_str = $db_config;
     if (is_object($config_str) && function_exists('spl_object_hash')) {
         $guid = spl_object_hash($config_str);
     } elseif (is_resource($config_str)) {
         $config_str = get_resource_type($config_str) . strval($config_str);
     } else {
         $config_str = serialize($config_str);
     }
     $guid = md5($config_str);
     if (!isset(self::$_instance[$guid])) {
         $obj = new db_Db();
         self::$_instance[$guid] = $obj->factory($db_config);
     }
     return self::$_instance[$guid];
 }
Example #2
0
 /**
  * 字段和表名处理
  * @access protected
  * @param string $key
  * @return string
  */
 protected function parseKey(&$key)
 {
     if (!is_numeric($key) && $this->dbType == 'MYSQL') {
         $key = trim($key);
         if (!preg_match('/[,\'\\"\\*\\(\\)`.\\s]/', $key)) {
             $key = '`' . $key . '`';
         }
         return $key;
     } else {
         return parent::parseKey($key);
     }
 }
Example #3
0
 /**
  * 切换当前的数据库连接
  * @access public
  * @param integer $linkNum  连接序号
  * @param mixed $config  数据库连接信息
  * @param boolean $force 强制重新连接
  * @return Model
  */
 public function db($linkNum = '', $config = '', $force = false)
 {
     if ('' === $linkNum && $this->db) {
         return $this->db;
     }
     static $_db = array();
     if (!isset($_db[$linkNum]) || $force) {
         // 创建一个新的实例
         if (!empty($config) && is_string($config) && false === strpos($config, '/')) {
             // 支持读取配置参数
             $config_obj = Yaf_Registry::get("config");
             $config_db = $config_obj->database->config->toArray();
             $config = $config_db;
         } else {
             $config_obj = Yaf_Registry::get("config");
             $config_db = $config_obj->database->config->toArray();
             $config = $config_db;
         }
         $_db[$linkNum] = db_Db::getInstance($config);
     } elseif (NULL === $config) {
         $_db[$linkNum]->close();
         // 关闭数据库连接
         unset($_db[$linkNum]);
         return;
     }
     // 切换数据库连接
     $this->db = $_db[$linkNum];
     $this->_after_db();
     // 字段检测
     if (!empty($this->name) && $this->autoCheckFields) {
         $this->_checkTableInfo();
     }
     return $this;
 }