## 数据库
数据库源目录 `lib/Db`,定义需要连接的数据库。
数据源示例:
```php
/**
* Fend Framework
* [Gimoo!] (C)2006-2009 Gimoo Inc. (http://fend.gimoo.net)
*
* 同学主库
*
* @Package GimooFend
* @Author Gimoo <gimoohr@gmail.com>
* @version $Id$
**/
class Db_Shop extends Fend_Db_Mysqli
{
static $in=array();
public static function Factory($r)
{
// 如果未配置读写分离,则默认只连如写库
!isset($GLOBALS['_db_shop'][$r]) && $r='w';
// 校验是否存在实例
!isset(self::$in[$r]) && self::$in[$r]=new self($r);
// 返回已经连入的实例
return self::$in[$r];
}
//初始化Mysql对象并进行连接服务器尝试
public function __construct($r)
{
$this->_cfg=$this->db_shop[$r];
if(!isset($this->_cfg['port'])){
$this->_cfg['port']='3306';
}
if(!isset($this->_cfg['lang'])){
$this->_cfg['lang']='utf8';
}
$this->_db=new mysqli($this->_cfg['host'],$this->_cfg['user'],$this->_cfg['pwd'],$this->_cfg['name'],$this->_cfg['port']);
if (mysqli_connect_errno()) {
self::showMsg("Connect failed: ". mysqli_connect_error());
}
$this->_db->query("SET character_set_connection={$this->_cfg['lang']},character_set_results={$this->_cfg['lang']},character_set_client=binary,sql_mode='';");
}
//清理DB连接
public static function clean()
{
//关闭库连接
foreach(self::$in as $obj ){
$obj->_db->close();
}
//销毁变量
self::$in=array();
}
// 测试用的
public function state()
{
print_R(self::$in);
// print_R($this->_db->stat());
}
}
```
基础方法:
```php
/**
* DB Read 基础类
* @Author Wanglele <wanglelecc@gmail.com>
* @version 2.0.1
*/
abstract class Db_Read extends Db_Init
{
/**
* 表名
* @var string
*/
protected $table = '';
/**
* Db 名称
* @var string
*/
protected $dbName = 'Db_Shop';
/**
* 获取对象
* @return $this
*/
public static function Factory()
{
return new static;
}
/**
* 构造方法
*/
public function __construct()
{
$this->boot();
}
/**
* 初始化操作
*/
public function boot()
{
}
/**
* 获取表名
* @return string
*/
public function table()
{
return $this->table;
}
/**
* 获取 Db 对象
* @return mixed
*/
public function db()
{
return $this->dbName::Factory('r');
}
/**
* 获取信息
* @param int $id 栏目
* @return array 基本信息
* */
public function get($id, $e = '*')
{
!$e && $e = "*";
$rs = $this->db()->get("SELECT {$e} FROM {$this->table} WHERE id={$id}");
return !empty($rs) ? $rs : [];
}
/**
* 获取多组信息
* @param int $id
* @param string $e
* @param $index
* @return array
*/
public function gets($id, $e = '*', $index = '')
{
!$e && $e = "*";
if (is_array($id)) {
$id = implode(',', $id);
}
// 连接DB
$db = $this->db();
$item = [];
$q = $db->query("SELECT {$e} FROM {$this->table} WHERE id in ({$id})");
while ($rs = $db->fetch($q)) {
if ($index) {
$item[$rs[$index]] = $rs;
} else {
$item[] = $rs;
}
}
return !empty($item) ? $item : [];
}
/**
* 根据条件获取信息
* @return array
*/
public function getOne()
{
$rs = $this->db()->get("SELECT {$this->_field} FROM {$this->table} {$this->_where} {$this->_order} LIMIT 0, 1");
// 重置查询条件
parent::reset();
return !empty($rs) ? $rs : [];
}
/**
* 获取查询
* @param $sql
* @return array
*/
public function getQuery($sql)
{
$rs = $this->db()->get($sql);
return !empty($rs) ? $rs : [];
}
/**
* 查询一组数据
* @param int $psize 每页显示条目
* @param int $skip 跳过多少条
* @return array
**/
public function getData($psize = 10, $skip = 0)
{
$item = [];
// 连接DB
$db = $this->db();
$q = $db->query("SELECT {$this->_field} FROM {$this->table} {$this->_where} {$this->_order} LIMIT {$skip},{$psize}");
while ($rs = $db->fetch($q)) {
$item[] = $rs;
}
// 重置查询条件
self::reset();
return $item;
}
/**
* 列表查询
* @param int $psize 每页显示条目
* @param int $skip 跳过多少条
* @return array
**/
public function getList($psize = 10, $skip = 0)
{
$item = ['psize' => $psize, 'skip' => $skip, 'total' => 0, 'list' => []];
// 连接DB
$db = $this->db();
// 查询总数
$item['total'] = (int)$db->get("SELECT COUNT(*) FROM {$this->table} {$this->_where}", 1);
// 查询列表
if ($item['total'] > 0) {
$q = $db->query("SELECT {$this->_field} FROM {$this->table} {$this->_where} {$this->_order} LIMIT {$skip},{$psize}");
while ($rs = $db->fetch($q)) {
$item['list'][] = $rs;
}
}
// 重置查询条件
parent::reset();
return $item;
}
/**
* 获取数据
* @return array
**/
public function getAll()
{
// 连接DB
$db = $this->db();
// 返回数据
$items = [];
$q = $db->query("SELECT {$this->_field} FROM {$this->table} {$this->_where} {$this->_order}");
while ($rs = $db->fetch($q)) {
$items[] = $rs;
}
// 重置查询条件
parent::reset();
return $items;
}
/**
* 根据 sql 获取全部数据
* @param string $sql
* @return array
**/
public function getAllQuery($sql)
{
// 连接DB
$db = $this->db();
// 返回数据
$items = [];
$q = $db->query($sql);
while ($rs = $db->fetch($q)) {
$items[] = $rs;
}
return $items;
}
/**
* 查询总数
* @return integer
*/
public function getTotal()
{
// 查询总数
return (int)$this->db()->get("SELECT COUNT(*) FROM {$this->table} {$this->_where}", 1);
}
/**
* 获取完整图片 URL
* @param $img
* @return string
*/
public function getImage($img)
{
return Misc_Image::getUrl($img);
}
/**
* 获取 CC 视频完整 URL
* @param $vurl
* @param int $quality
* @return string
*/
public function getVideo($vurl, $quality = 0)
{
return Misc_Image::getVideo($vurl, $quality);
}
}
```