/** * 执行查询语句 * * @param mixed $query 查询语句或者查询对象 * @param boolean $op 数据库读写状态 * @param string $action 操作动作 * @return mixed */ public function query($query, $op = self::READ, $action = self::SELECT) { /** 在适配器中执行查询 */ if ($query instanceof Typecho_Db_Query) { $action = $query->getAttribute('action'); $op = self::UPDATE == $action || self::DELETE == $action || self::INSERT == $action ? self::WRITE : self::READ; } else { if (!is_string($query)) { /** 如果query不是对象也不是字符串,那么将其判断为查询资源句柄,直接返回 */ return $query; } } /** 选择连接池 */ $handle = $this->selectDb($op); /** 提交查询 */ $resource = $this->_adapter->query($query, $handle, $op, $action); if ($action) { //根据查询动作返回相应资源 switch ($action) { case self::UPDATE: case self::DELETE: return $this->_adapter->affectedRows($resource, $handle); case self::INSERT: return $this->_adapter->lastInsertId($resource, $handle); case self::SELECT: default: return $resource; } } else { //如果直接执行查询语句则返回资源 return $resource; } }
/** * 执行查询语句 * * @param mixed $query 查询语句或者查询对象 * @param boolean $op 数据库读写状态 * @param string $action 操作动作 * @return mixed */ public function query($query, $op = self::READ, $action = self::SELECT) { /** 在适配器中执行查询 */ if ($query instanceof Typecho_Db_Query) { $action = $query->getAttribute('action'); $op = self::UPDATE == $action || self::DELETE == $action || self::INSERT == $action ? self::WRITE : self::READ; } else { if (!is_string($query)) { /** 如果query不是对象也不是字符串,那么将其判断为查询资源句柄,直接返回 */ return $query; } } /** 选择连接池 */ if (!isset($this->_connectedPool[$op])) { if (empty($this->_pool[$op])) { /** Typecho_Db_Exception */ require_once 'Typecho/Db/Exception.php'; throw new Typecho_Db_Exception('Missing Database Connection'); } $selectConnection = rand(0, count($this->_pool[$op]) - 1); $selectConnectionConfig = $this->_config[$selectConnection]; $selectConnectionHandle = $this->_adapter->connect($selectConnectionConfig); $other = self::READ == $op ? self::WRITE : self::READ; if (!empty($this->_pool[$other]) && in_array($selectConnection, $this->_pool[$other])) { $this->_connectedPool[$other] =& $selectConnectionHandle; } $this->_connectedPool[$op] =& $selectConnectionHandle; } $handle = $this->_connectedPool[$op]; /** 提交查询 */ $resource = $this->_adapter->query($query, $handle, $op, $action); if ($action) { //根据查询动作返回相应资源 switch ($action) { case self::UPDATE: case self::DELETE: return $this->_adapter->affectedRows($resource, $handle); case self::INSERT: return $this->_adapter->lastInsertId($resource, $handle); case self::SELECT: default: return $resource; } } else { //如果直接执行查询语句则返回资源 return $resource; } }