dedecms dede sql

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文

核心 DedeCMS 数据表结构

在执行任何 SQL 操作之前,了解其核心表结构是第一步,以下是 DedeCMS 最常用的一些数据表及其用途:

dedecms dede sql
(图片来源网络,侵删)
数据表前缀 (默认 dede_) 表名 (默认) 主要用途
dede_ archives 文章主表,存储所有文章的基本信息,如 ID、标题、 typeid (栏目ID)、pubdate (发布时间) 等。
dede_ addonarticle 文章副表,存储文章的详细内容,如 body 字段,主副表分离是为了提高查询效率。
dede_ arctype 栏目表,存储网站栏目的信息,如 ID、typename (栏目名)、reid (父栏目ID)、ispart (是否频道) 等。
dede_ arcrank 文档级别表,定义了文章的权限级别,如“仅站长可见”、“推荐”、“待审核”等。
dede_ admin 管理员表,存储管理员账号、密码和权限信息。
dede_ member 会员表,存储会员账号、密码和相关信息。
dede_ tagindex / taglist 标签表tagindex 存储标签名称和引用次数,taglist 存储标签与文章的关联关系。
dede_ uploads 附件/附件表,记录上传的图片、文档等信息。

重要提示

  • 在操作前,务必备份数据库!这是防止误操作导致数据丢失的唯一有效方法。
  • 修改表前缀:如果你的网站安装时修改了默认的表前缀(mycms_),请将所有 SQL 语句中的 dede_ 替换为你自己的前缀。

常用 SQL 操作场景与示例

以下是一些在 DedeCMS 网站管理和维护中非常常见的 SQL 操作。

场景 1:批量修改文章内容或标题

需求:将所有文章标题中的“旧网站”替换为“新网站”。

SQL 语句

dedecms dede sql
(图片来源网络,侵删)
UPDATE dede_archives SET title = REPLACE(title, '旧网站', '新网站');
  • UPDATE:更新数据的命令。
  • dede_archives:要操作的表。
  • SET title = ...:指定要更新的字段是 title,并设置新的值。
  • REPLACE():MySQL 的内置函数,用于字符串替换。

需求:将所有文章内容中的 http://old-domain.com 替换为 https://new-domain.com

UPDATE dede_addonarticle SET body = REPLACE(body, 'http://old-domain.com', 'https://new-domain.com');
  • 注意:文章内容存储在 addonarticle 表的 body 字段中。

场景 2:批量修改文章所属栏目

需求:将 ID 为 10 的栏目下的所有文章,移动到 ID 为 20 的栏目下。

SQL 语句

UPDATE dede_archives SET typeid = 20 WHERE typeid = 10;
  • UPDATE dede_archives SET typeid = 20:将 archives 表中的 typeid 字段更新为 20。
  • WHERE typeid = 10:这是一个条件,表示只更新那些 typeid 原来为 10 的记录。

场景 3:批量删除某个栏目下的所有文章

警告:此操作不可逆,请务必先备份数据库!

dedecms dede sql
(图片来源网络,侵删)

需求:删除 ID 为 5 的栏目下的所有文章。

SQL 语句

DELETE FROM dede_archives WHERE typeid = 5;
  • DELETE FROM dede_archives:从 archives 表中删除数据。
  • WHERE typeid = 5:条件,只删除 typeid 为 5 的文章记录。

注意:这个操作只会删除 archives 表中的记录,为了彻底清理,你可能还需要删除 addonarticletaglist 等相关表中的数据。

-- 删除文章副表数据
DELETE FROM dede_addonarticle WHERE aid IN (SELECT id FROM dede_archives WHERE typeid = 5);
-- 删除标签关联数据 (可选)
DELETE FROM dede_taglist WHERE typeid = 5;

场景 4:批量修改文章发布时间

需求:将所有在 2025 年 1 月发布的文章,修改为 2025 年 12 月 31 日发布。

SQL 语句

UPDATE dede_archives SET pubdate = UNIX_TIMESTAMP('2025-12-31 00:00:00') WHERE FROM_UNIXTIME(pubdate, '%Y-%m') = '2025-01';
  • UNIX_TIMESTAMP():将日期字符串转换为 Unix 时间戳,DedeCMS 内部使用时间戳存储日期。
  • FROM_UNIXTIME():将 Unix 时间戳转换为可读的日期格式,用于 WHERE 条件判断。

场景 5:批量添加或修改栏目

需求:添加一个新的顶级栏目。

SQL 语句

INSERT INTO `dede_arctype` (`id`, `reid`, `topid`, `typename`, `typedir`, `isdefault`, `issend`, `ishidden`, `channeltype`, `corank`, `ispart`, `description`, `keywords`, `seotitle`, `moresite`, `siteurl`, `templet`, `sameidlist`) VALUES
(NULL, 0, 0, '新栏目名称', '/new/', 0, 0, 0, 1, 0, 0, '', '', '', 0, '', '', '');
  • INSERT INTO ... VALUES (...):标准的插入数据语句。
  • reid:父栏目 ID,0 表示顶级栏目。
  • topid:顶级栏目 ID,对于顶级栏目,它和 id 相同,但这里可以设为 0 或留空让数据库处理。
  • typename:栏目名称。
  • typedir:栏目目录,建议以 开头。
  • channeltype模型,1 表示普通文章栏目。

场景 6:查询指定栏目的所有文章 ID 和标题

需求:查询 ID 为 8 的栏目下所有文章的 ID 和标题。

SQL 语句

SELECT id, title FROM dede_archives WHERE typeid = 8 ORDER BY id DESC;
  • SELECT id, title FROM ...:选择要查询的字段。
  • ORDER BY id DESC:按 ID 降序排列,最新的文章排在前面。

如何执行 SQL 语句?

在 DedeCMS 环境中,有几种常见的方式来执行 SQL 语句:

  1. DedeCMS 后台执行器 (推荐)

    • 这是最安全、最方便的方式。
    • 登录 DedeCMS 后台 -> 系统 -> SQL命令行工具
    • 在文本框中粘贴你的 SQL 语句。
    • 点击“提交”即可执行,系统会返回执行结果。
  2. phpMyAdmin (最常用)

    • 这是管理 MySQL 数据库的强大工具,通常由你的虚拟主机服务商提供。
    • 登录 phpMyAdmin,选择你的 DedeCMS 数据库。
    • 点击顶部的 SQL 标签页。
    • 在文本框中粘贴你的 SQL 语句。
    • 点击“执行”。
  3. 代码中执行

    • 在 DedeCMS 的模板文件或 PHP 文件中,可以通过数据库操作类 dsql 来执行。

    • 示例代码

      // 引入 common.inc.php 文件以获取 $dsql 对象
      // 通常在 include 或 require 的文件中已经包含了
      // require_once(dirname(__FILE__)."/include/common.inc.php");
      $sql = "UPDATE dede_archives SET title = REPLACE(title, '旧网站', '新网站')";
      $dsql->ExecuteNoneQuery($sql); // 执行不返回结果的 SQL (如 UPDATE, DELETE, INSERT)
      // 如果要查询并获取结果
      $sql = "SELECT id, title FROM dede_archives WHERE typeid = 8";
      $dsql->SetQuery($sql);
      $dsql->Execute();
      while($row = $dsql->GetArray()){
          echo $row['id'] . ' - ' . $row['title'] . '<br />';
      }

安全注意事项

SQL 注入是 DedeCMS 最常见的安全漏洞之一!

  1. 永远不要信任用户输入:所有来自用户的数据(如表单提交、URL参数)都应被视为不可信。

  2. 使用 DedeCMS 内置的安全函数

    • ReplaceSqlSafe($str):用于过滤 SQL 查询中的特殊字符。

    • HtmlReplace($str):用于过滤 HTML 标签。

    • GetPinyin($str):获取拼音,相对安全。

    • 示例

      // 假设 $keyword 来自用户输入
      $keyword = isset($_GET['keyword']) ? trim($_GET['keyword']) : '';
      $keyword = ReplaceSqlSafe($keyword); // 必须进行过滤!
      $sql = "SELECT * FROM dede_archives WHERE title LIKE '%".$keyword."%'";
      // ... 执行查询
  3. 使用预处理语句 (更高级的安全方式)

    • dsql 类支持预处理,可以有效防止 SQL 注入。
    • 示例
      $sql = "SELECT * FROM dede_archives WHERE title LIKE ?";
      $dsql->SetQuery($sql);
      $dsql->Execute('s', '%'. $keyword .'%'); // 's' 表示字符串类型
      while($row = $dsql->GetArray()){
          // ...
      }
操作类型 SQL 示例 关键点
修改数据 UPDATE dede_archives SET title = REPLACE(title, 'A', 'B'); 使用 UPDATEREPLACE() 函数
移动栏目 UPDATE dede_archives SET typeid = 20 WHERE typeid = 10; 修改 typeid 字段
删除数据 DELETE FROM dede_archives WHERE typeid = 5; 极其危险,务必备份!
添加数据 INSERT INTO dede_arctype (...) VALUES (...); 插入新记录,注意字段匹配
查询数据 SELECT id, title FROM dede_archives WHERE typeid = 8; 使用 SELECTWHERE 条件
执行工具 后台 SQL 工具 / phpMyAdmin 推荐使用后台工具,安全便捷

希望这份详细的指南能帮助你更好地理解和操作 DedeCMS 的数据库。备份是第一要务,安全是永恒的主题。

-- 展开阅读全文 --
头像
2025全国计算机二级C语言题库有何变化?
« 上一篇 2025-12-27
dede position如何修改?
下一篇 » 2025-12-27

相关文章

取消
微信二维码
支付宝二维码

目录[+]