参考多说插件
#表名 $table['plugin_duoshuo_comment'] = '%pre%plugin_duoshuo_comment'; ###注意表名要加上%pre%可以区分同一数据库中的不同的程序所生成的表 #表结构 $datainfo['plugin_duoshuo_comment'] = array( 'ID' => array('ds_ID','integer','',0), 'key' => array('ds_key','string',128,''), 'cmtid' => array('ds_cmtid','integer','',0) ); #全局声明 global $zbp; #判断是否已创建,否则新建数据表 if(!$zbp->db->ExistTable($GLOBALS['table']['plugin_duoshuo_comment'])) { $s = $zbp->db->sql->CreateTable($GLOBALS['table']['plugin_duoshuo_comment'],$GLOBALS['datainfo']['plugin_duoshuo_comment']); $zbp->db->QueryMulit($s); }
提示:只验证了MySQL数据库,其余的需要自行验证。
在ZBlogPHP插件开发时,经常需要插件关联的数据表功能。
接下来以收藏文章功能,演示一下ZBlogPHP的数据库建表与增删改查。
第一步,声明定义数据表结构。
function 插件ID_defineDatabase() { $database = array( /** * 收藏表 */ '插件ID_Collect' => array( 'table' => '%pre%插件ID_collect', 'datainfo' => array( 'ID' => array('cc_ID', 'integer', '', 0), 'UID' => array('cc_UID', 'integer', '', 0), 'LogID' => array('cc_LogID', 'integer', '', 0), 'CreateTime' => array('cc_CreateTime', 'integer', '', 0), 'Meta' => array('cc_Meta', 'string', '', ''), ), ), ); foreach ($database as $key => $v) { $table = $v['table']; $datainfo = $v['datainfo']; $GLOBALS['table'][$key] = $table; $GLOBALS['datainfo'][$key] = $datainfo; } return $database; } 插件ID_defineDatabase();这是一个声明插件数据表结构的函数。
array('字段名', '类型', '长度参数(根据类型定义)', '默认值');具体的类型,大家自行补充MySQL的基础知识。
// int array('ID', 'integer', '', 0), // tinyint array('Type', 'integer', 'tinyint', 0), // bigint array('EndTime', 'integer', 'bigint', 0), // char array('Value', 'char', 10, ''), // varchar array('Title', 'string', 250, ''), // longtext array('Content', 'string', '', ''),
function 插件ID_createTable() { global $zbp; $database = 插件ID_defineDatabase(); foreach ($database as $k => $v) { if (!$zbp->db->ExistTable($v['table'])) { $s = $zbp->db->sql->CreateTable($v['table'], $v['datainfo']); $zbp->db->QueryMulit($s); } } } // 删表的方法 具体什么时候删,自行决定 function 插件ID_delTable() { global $zbp; $database = 插件ID_defineDatabase(); foreach ($database as $k => $v) { if ($zbp->db->ExistTable($v['table'])) { $s = $zbp->db->sql->DelTable($v['table']); $zbp->db->QueryMulit($s); } } }在插件的启用函数中调用
function InstallPlugin_插件ID() { 插件ID_createTable(); }
接下来声明一个类继承Base完成基本的增删改查操作。
class 插件ID_Collect extends Base { /** * 在构造函数中 * 将定义的数据表名称与数据结构交给父类Base去处理 */ public function __construct() { global $zbp; parent::__construct($zbp->table['插件ID_Collect'], $zbp->datainfo['插件ID_Collect'], __CLASS__); // 因为数据中有一条创建时间字段,提前在此赋予默认值 $this->CreateTime = time(); } }基于这个类,就可以进行基本的curd了
function 插件ID_addCollect($userId, $logId) { $collect = new 插件ID_Collect(); $collect->UID = $userId; $collect->LogID = $logId; $collect->Save(); // 保存后,$collect->ID就能输出这条记录的ID了 }更新一条数据
function 插件ID_updateCollect($collectId) { $collect = new 插件ID_Collect(); $status = $collect->LoadInfoByID($collectId); if ($status) { $collect->CreateTime = time(); $collect->Save(); } // 这样收藏的时间就变成了最新的 }删除一条数据
function 插件ID_delCollect($collectId) { $collect = new 插件ID_Collect(); $status = $collect->LoadInfoByID($collectId); if ($status) { $collect->Del(); } }查询数据,单独阐述:
function 插件ID_getUserCollect($userId, $logId) { global $zbp; $w = array(); $w[] = array('=', 'cc_UID', $userId); $w[] = array('=', 'cc_LogID', $logId); $sql = $zbp->db->sql->Select($zbp->table['插件ID_Collect'], array('*'), $w); $list = $zbp->GetListType('插件ID_Collect', $sql); if (count($list) > 0) { return $list[0]; } return false; }其它的查询,比如查询某用户的指定数量收藏记录
function 插件ID_getUserCollectList($userId, $num = 10) { global $zbp; $w = array(); $w[] = array('=', 'cc_UID', $userId); $num = (int) $num > 0 ? (int) $num : 10; $sql = $zbp->db->sql->Select($zbp->table['插件ID_Collect'], array('*'), $w, null, $num); $list = $zbp->GetListType('插件ID_Collect', $sql); return $list; }