zblog自定义数据库表
时间:2023年09月15日
/来源:网络
/编辑:佚名
自定义数据库表
参考多说插件
#表名
$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();
这是一个声明插件数据表结构的函数。
为什么要在定义函数以后就执行?因为需要在插件运行前,将结构信息赋值到全局变量中。
来自于c_system_base.php同类风格的声明结构,并不表示就是固定格式。
其中建议以类的名称为数据库表的声明key,方便后期的可读性。
字段“table”是数据表的名称,用%pre%+插件ID+数据表名称的方式组成。
字段“datainfo”是数据字段的结构,有具体的声明结构,可以在zb_system/function/lib/sql/中查看不同数据库的语句拼接。
关于datainfo的声明结构说明:
根据声明的顺序,数组第一条在MySQL中会加上索引(PRIMARY KEY)
声明结构
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();
}
}
查询数据,单独阐述:
已知ID的情况,通过上面演示的LoadInfoByID($ID) 就能通过父类Base的方法读取一条数据。
在只知道UID和LogID,就需要组装where语句。
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;
}
参考多说插件
#表名
$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();
这是一个声明插件数据表结构的函数。
为什么要在定义函数以后就执行?因为需要在插件运行前,将结构信息赋值到全局变量中。
来自于c_system_base.php同类风格的声明结构,并不表示就是固定格式。
其中建议以类的名称为数据库表的声明key,方便后期的可读性。
字段“table”是数据表的名称,用%pre%+插件ID+数据表名称的方式组成。
字段“datainfo”是数据字段的结构,有具体的声明结构,可以在zb_system/function/lib/sql/中查看不同数据库的语句拼接。
关于datainfo的声明结构说明:
根据声明的顺序,数组第一条在MySQL中会加上索引(PRIMARY KEY)
声明结构
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();
}
}
查询数据,单独阐述:
已知ID的情况,通过上面演示的LoadInfoByID($ID) 就能通过父类Base的方法读取一条数据。
在只知道UID和LogID,就需要组装where语句。
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;
}
新闻资讯 更多
热门文章
- 178Moban源码谈谈免费源码与收费源码的区别
- 2帝国CMS忘记后台登陆用户名、密码、认证码的解决方法
- 3帝国CMS(EmpireCMS) v7.5后台任意代码执行漏洞及具体修复方法
- 4帝国CMS和WordPress 哪个好?哪个适合建站?
- 5如何解决Discuz的密码错误次数过多请15分钟后登陆的问题
- 6帝国cms灵动标签取得内容和栏目链接地址
- 7emlog pro 注册码“开心”教程(如果有一天,emlog官方版 或者 emlog免费版 跑路了,那用户怎么办?)
- 8织梦CMS在nginx下设置伪静态方法(附nginx伪静态规则)
- 9帝国cms后台登录出现”您还未登录”怎么解决?
- 10帝国cms7.5忘记登录密码 和忘记登录认证码以及多次登录 失败被锁定解决办法