🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 数据库 数据库源目录 `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); } } ```