Beispiel #1
0
 /**
  * 执行查询语句
  *
  * @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;
     }
 }
Beispiel #2
0
 /**
  * 执行查询语句
  *
  * @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;
     }
 }