当前位置:首页 > 问答 > 正文

PHPcms|数据库结构 PHPcms数据库字段详解及phpcms常用数据表字段说明

PHPcms数据库结构详解:从零开始掌握核心数据表

场景引入:一个CMS开发者的日常困惑

"这用户数据到底存在哪个表里啊?" 凌晨2点,程序员小李盯着屏幕抓耳挠腮,他正在基于PHPcms二次开发一个企业网站,需要修改用户注册流程,却卡在了找不到相关数据表的困境中,相信很多使用PHPcms的开发者都遇到过类似的困扰——这个看似简单的CMS系统,数据库结构其实暗藏玄机。

别担心,今天我们就来彻底拆解PHPcms的数据库结构,让你像了解自家衣柜一样熟悉它的每一张表、每一个字段,准备好了吗?我们开始这场数据库探险!

PHPcms数据库整体架构

PHPcms采用经典的MySQL关系型数据库设计,所有数据表都带有phpcms_前缀(v9版本后改为v9_前缀),这种设计既避免了与其他系统表名冲突,也方便开发者快速识别。

整个数据库结构可以分为几个核心模块:

  • 用户权限模块管理模块
  • 模板风格模块
  • 扩展功能模块
  • 系统基础模块

核心数据表详解

用户权限相关表

phpcms_member(会员主表) 这是整个系统的用户核心表,存储所有注册会员的基本信息。

CREATE TABLE `phpcms_member` (
  `userid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `username` char(20) NOT NULL DEFAULT '',
  `password` char(32) NOT NULL DEFAULT '',
  `encrypt` char(6) NOT NULL DEFAULT '',
  `nickname` char(20) NOT NULL DEFAULT '',
  `regdate` int(10) unsigned NOT NULL DEFAULT '0',
  `lastlogin` int(10) unsigned NOT NULL DEFAULT '0',
  `regip` char(15) NOT NULL DEFAULT '',
  `lastip` char(15) NOT NULL DEFAULT '',
  `loginnum` smallint(5) unsigned NOT NULL DEFAULT '0',
  `email` char(32) NOT NULL DEFAULT '',
  `groupid` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `modelid` smallint(5) unsigned NOT NULL DEFAULT '0',
  `point` smallint(5) unsigned NOT NULL DEFAULT '0',
  `amount` decimal(8,2) unsigned NOT NULL DEFAULT '0.00',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `vip` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `overduedate` int(10) unsigned NOT NULL DEFAULT '0',
  `siteid` smallint(5) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`userid`),
  UNIQUE KEY `username` (`username`),
  KEY `email` (`email`(20))
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

关键字段说明:

  • userid:用户唯一ID,自增主键
  • encrypt:密码加密盐值,与password字段配合使用
  • groupid:用户组ID,关联phpcms_member_group表
  • modelid:用户模型ID,用于扩展用户字段
  • status:状态(0未审核,1正常,2禁用)

phpcms_member_detail(会员详情表) 存储用户的扩展信息,与主表通过userid关联。

PHPcms|数据库结构 PHPcms数据库字段详解及phpcms常用数据表字段说明

内容管理相关表

phpcms_content(内容主表)的"入口"表,采用主表-副表分离设计减轻单表压力。

CREATE TABLE `phpcms_content` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `catid` smallint(5) unsigned NOT NULL DEFAULT '0',
  `typeid` smallint(5) unsigned NOT NULL DEFAULT '0', char(80) NOT NULL DEFAULT '',
  `style` char(24) NOT NULL DEFAULT '',
  `thumb` char(100) NOT NULL DEFAULT '',
  `keywords` char(40) NOT NULL DEFAULT '',
  `description` char(255) NOT NULL DEFAULT '',
  `posids` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `url` char(100) NOT NULL DEFAULT '',
  `listorder` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `status` tinyint(2) unsigned NOT NULL DEFAULT '1',
  `sysadd` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `islink` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `username` char(20) NOT NULL DEFAULT '',
  `inputtime` int(10) unsigned NOT NULL DEFAULT '0',
  `updatetime` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `status` (`status`,`listorder`,`id`),
  KEY `listorder` (`catid`,`status`,`listorder`,`id`),
  KEY `catid` (`catid`,`status`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

关键字段说明:

  • catid:栏目ID,关联phpcms_category表
  • typeid类型ID
  • posids:推荐位ID集合(二进制位存储)
  • status:状态(99已审核,1待审核,0回收站)

phpcms_content_data(内容副表)等大字段内容,通过id与主表关联。

栏目分类表

phpcms_category(栏目表)分类骨架。

CREATE TABLE `phpcms_category` (
  `catid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `siteid` smallint(5) unsigned NOT NULL DEFAULT '0',
  `module` varchar(15) NOT NULL DEFAULT '',
  `type` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `modelid` smallint(5) unsigned NOT NULL DEFAULT '0',
  `parentid` smallint(5) unsigned NOT NULL DEFAULT '0',
  `arrparentid` varchar(255) NOT NULL DEFAULT '',
  `child` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `arrchildid` mediumtext NOT NULL,
  `catname` varchar(30) NOT NULL DEFAULT '',
  `image` varchar(100) NOT NULL DEFAULT '',
  `description` mediumtext NOT NULL,
  `url` varchar(100) NOT NULL DEFAULT '',
  `items` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `hits` int(10) unsigned NOT NULL DEFAULT '0',
  `setting` mediumtext NOT NULL,
  `listorder` smallint(5) unsigned NOT NULL DEFAULT '0',
  `ismenu` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `sethtml` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `letter` varchar(30) NOT NULL DEFAULT '',
  PRIMARY KEY (`catid`),
  KEY `module` (`module`,`parentid`,`listorder`,`catid`),
  KEY `siteid` (`siteid`,`type`,`modelid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

关键字段说明:

  • arrparentid:所有父级ID路径(如0,1,2)
  • arrchildid:所有子级ID集合
  • setting:栏目设置的序列化存储
  • ismenu:是否在导航显示

实用技巧:如何高效查询PHPcms数据

  1. 多表联查示例:获取带分类名称的文章列表

    $db = pc_base::load_model('content_model');
    $db->table_name = $db->db_tablepre.'content c';
    $db->join(' LEFT JOIN '.$db->db_tablepre.'category cat ON c.catid=cat.catid');
    $list = $db->select('c.*, cat.catname', 'c.status=99', 10, 'c.id DESC');
  2. 快速获取用户信息:通过用户名获取完整用户数据

    PHPcms|数据库结构 PHPcms数据库字段详解及phpcms常用数据表字段说明

    $user = get_memberinfo($_GET['username']);
    // 包含主表和详情表的所有字段

    统计**:统计各栏目文章数量

    SELECT catid, COUNT(*) AS total 
    FROM phpcms_content 
    WHERE status=99 
    GROUP BY catid

常见问题解答

Q:为什么我的内容表找不到? A:PHPcms的内容表是动态创建的,命名规则为phpcms_content_数字,数字对应模型ID,可以在phpcms_model表中查询模型对应的表名。

Q:用户密码是如何加密的? A:PHPcms采用双重MD5加密:md5(md5(明文密码).encrypt),其中encrypt是随机6位盐值。

Q:如何扩展用户字段? A:通过用户模型功能,在后台创建新字段后,数据会存储在phpcms_member_detail表中。

通过本文的详细解析,相信你已经对PHPcms的数据库结构有了全面认识,记住几个关键点:

  1. 用户数据看member表数据看content表+对应模型表
  2. 分类关系看category表
  3. 权限控制看member_group和role表

掌握这些核心表结构,你在进行PHPcms二次开发时就能游刃有余,不再为找不到数据而抓狂,数据库就像CMS系统的仓库,现在你已经拿到了完整的仓库地图,接下来就是大展身手的时候了!

发表评论