/** * 取得数据库类实例 * @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]; }
/** * 字段和表名处理 * @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); } }
/** * 切换当前的数据库连接 * @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; }