Xunsearch PHP-SDK v1.4.9 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->type, 0, $pos));
$param['path'] = substr($this->type, $pos + (substr($this->type, $pos + 1, 2) === '//' ? 3 : 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($sql, 0, strlen($sql) - strlen($match[0]));
}
$this->sql = $sql;
if ($this->limit == 0) {
$sql = preg_replace('/SELECT\s+.+?FROM\s/i', 'SELECT COUNT(*) AS count FROM ', $sql);
$res = $this->db->query1($sql);
$this->limit = $res['count'] - $this->offset;
}
}`

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