Xunsearch PHP-SDK v1.4.17 API 参考文档

XSDatabaseDataSource

XS.util
继承关系 class XSDatabaseDataSource » XSDataSource
版本 1.0.0
源代码 sdk/php/util/XSDataSource.class.php
SQL 数据库源

Protected 属性

隐去继承来的属性

名称 类型 描述 定义于
arg XSDataSource
inCli XSDataSource
type XSDataSource

Public 方法

隐去继承来的方法

名称 描述 定义于
__construct() 构造函数 XSDataSource
getCharset() 返回数据库输出字符集 XSDatabaseDataSource
getData() 从数据源中提取一条数据 XSDataSource
instance() 取得数据源对象实例 XSDataSource

Protected 方法

隐去继承来的方法

名称 描述 定义于
deinit() XSDatabaseDataSource
getDataList() 返回一批数据 XSDatabaseDataSource
init() XSDatabaseDataSource

方法明细

deinit() 方法
protected void deinit()
源码: sdk/php/util/XSDataSource.class.php#L211 (显示)
protected function deinit()
{
    
$this->db->close();
}

getCharset() 方法
public mixed getCharset()
{return} mixed 如果数据库不支持 UTF-8 转换则返回 false
源码: sdk/php/util/XSDataSource.class.php#L138 (显示)
public function getCharset()
{
    if (
$this->db->setUtf8()) {
        return 
'UTF-8';
    }
    return 
parent::getCharset();
}

返回数据库输出字符集

getDataList() 方法
protected 结果数组, getDataList()
{return} 结果数组, 没有更多数据时返回 false
源码: sdk/php/util/XSDataSource.class.php#L220 (显示)
protected function getDataList()
{
    if (
$this->limit <= 0) {
        return 
false;
    }
    
$sql $this->sql ' LIMIT ' min(self::PLIMIT$this->limit) . ' OFFSET ' $this->offset;
    
$this->limit -= self::PLIMIT;
    
$this->offset += self::PLIMIT;
    return 
$this->db->query($sql);
}

返回一批数据

init() 方法
protected void init()
源码: sdk/php/util/XSDataSource.class.php#L146 (显示)
protected function init()
{
    if (
strstr($this->type'sqlite')) {
        
$pos strpos($this->type':');
        
$param = array('scheme' => substr($this->type0$pos));
        
$param['path'] = substr($this->type$pos + (substr($this->type$pos 12) === '//' 1));
    } elseif (!(
$param parse_url($this->type))) {
        throw new 
XSException('Wrong format of DB connection parameter');
    } else {
        if (isset(
$param['user'])) {
            
$param['user'] = urldecode($param['user']);
        }
        if (isset(
$param['pass'])) {
            
$param['pass'] = urldecode($param['pass']);
        }
        
$param['path'] = isset($param['path']) ? trim($param['path'], '/') : '';
        if (empty(
$param['path'])) {
            throw new 
XSException('Not contain dbname of DB connection parameter');
        }
        if ((
$pos strpos($param['path'], '/')) === false) {
            
$param['dbname'] = $param['path'];
        } else {
            
$param['dbname'] = substr($param['path'], 0$pos);
            
$param['table'] = substr($param['path'], $pos 1);
        }
    }

    
// get driver
    
$driver self::getDriverName($param['scheme']);
    
$class 'XSDatabase' ucfirst($driver);
    if (!
class_exists($class)) {
        throw new 
XSException("Undefined database driver: '$driver'");
    }
    
$this->db = new $class;
    
$this->db->connect($param);

    
// set SQL & parse limit/offset
    
$this->limit $this->offset 0;
    
$sql $this->arg;
    if (empty(
$sql)) {
        if (!isset(
$param['table'])) {
            throw new 
XSException('Not specified any query SQL or db table');
        }
        
$sql 'SELECT * FROM ' $param['table'];
    } elseif (
preg_match('/ limit\s+(\d+)(?:\s*,\s*(\d+)|\s+offset\s+(\d+))?\s*$/i'$sql$match)) {
        if (isset(
$match[3])) {  // LIMIT xxx OFFSET yyy
            
$this->offset intval($match[3]);
            
$this->limit intval($match[1]);
        } elseif (isset(
$match[2])) { // LIMIT yyy, xxx
            
$this->offset intval($match[1]);
            
$this->limit intval($match[2]);
        } else { 
// lIMIT xxx
            
$this->limit intval($match[1]);
        }
        
$sql substr($sql0strlen($sql) - strlen($match[0]));
    }

    
$this->sql $sql;
    if (
$this->limit == 0) {
        
$sql preg_replace('/SELECT\s+.+?\sFROM\s/is''SELECT COUNT(*) AS count FROM '$sql);
        
$res $this->db->query1($sql);
        
$this->limit $res['count'] - $this->offset;
    }
}

Copyright © 2008-2011 by 杭州云圣网络科技有限公司
All Rights Reserved.