DedeCMS的留言数据主要存储在两个表中:

(图片来源网络,侵删)
dede_guestbook:这是主表,存储了每条留言的基本信息,如留言者姓名、联系方式、留言内容、IP地址、留言时间等。dede_guestbookbook:这是回复表,存储了管理员对每条留言的回复内容。
完整的留言数据导出需要同时考虑这两个表。
下面我将为您提供几种不同场景下的导出方法,从简单到复杂,您可以根据自己的需求选择。
使用DedeCMS后台直接导出(最简单,适合少量数据)
这是最直接的方法,但DedeCMS默认并不提供“一键导出所有留言”的功能,我们可以利用其“批量删除”功能,在删除前将数据导出为文本文件。
操作步骤:

(图片来源网络,侵删)
- 登录DedeCMS后台。
- 进入 【互动】->【留言管理】。
- 在留言列表页面,您会看到每条留言前面的复选框。
- 全选 所有留言(或者您只想导出部分,就手动勾选)。
- 点击列表上方的 【批量删除】 按钮。
- 系统会弹出一个确认对话框,并提示您:“您是否真的要删除选定的记录?在删除前系统会自动将其备份到
/data/trash/目录下。” - 关键步骤:在点击“确定”删除之前,请先去服务器的
/data/trash/目录下查看,您会发现刚刚被“删除”的留言数据已经被以文本文件的形式备份了,文件名通常是guestbook_日期.txt。 - 打开这个
.txt文件,您就能看到所有留言的文本格式数据了。
优点:
- 无需任何技术操作,纯后台操作。
- 对于不熟悉数据库的用户非常友好。
缺点:
- 是一个“曲线救国”的方法,本质上是“删除前备份”。
- 导出的是文本格式,不是Excel,数据可能比较杂乱,不易进行二次处理。
- 如果数据量非常大,全选可能会导致浏览器卡顿。
通过phpMyAdmin直接导出数据库(推荐,最灵活)
这是最常用、最灵活的方法,可以导出为多种格式(如Excel、CSV、SQL等),适合有一定服务器操作经验的用户。
操作步骤:

(图片来源网络,侵删)
- 登录您的服务器控制面板(如cPanel、宝塔面板等)。
- 找到并进入 phpMyAdmin 数据库管理工具。
- 在左侧的数据库列表中,选择您的DedeCMS所在数据库(通常以
dede_开头)。 - 在顶部的标签页中,点击 【导出】。
- 选择导出方式:
- 快速 - 显示部分行作为样本:适合快速查看,不推荐用于完整导出。
- 自定义 - 显示所有可能的选项:请选择此项,以获得所有控制选项。
- 选择要导出的表:
- 在“表”区域,取消勾选“全选”。
- 只勾选与留言相关的两个表:
dede_guestbook和dede_guestbookbook。
- 选择输出格式:
- CSV:通用格式,可以用Excel、WPS等表格软件直接打开,非常适合做数据分析和处理。(强烈推荐)
- Excel:直接生成
.xls或.xlsx文件,非常直观。 - SQL:生成数据库备份文件,适合用于数据迁移或备份。
- 设置其他选项:
在“格式特定选项”中,如果选择了CSV或Excel,可以勾选“将列名作为第一行”,这样导出的文件第一行就是字段名,方便识别。
- 点击 【执行】 按钮。
系统会开始处理,然后浏览器会自动下载一个包含您所选数据的文件(guestbook.csv 或 guestbookbook.csv)。
如何合并 guestbook 和 guestbookbook 的数据?
因为它们是两个独立的表,所以会导出两个独立的文件,您需要将它们合并:
-
方法A(手动匹配):
- 用Excel分别打开
guestbook.csv和guestbookbook.csv。 - 在
guestbook.csv中,有一个id字段,在guestbookbook.csv中有一个bid字段,这两个字段是对应的。 - 您可以将
guestbookbook.csv中的reply)列,根据id和bid的对应关系,手动粘贴到guestbook.csv的对应行中。
- 用Excel分别打开
-
方法B(使用SQL查询合并): 如果您对SQL比较熟悉,可以在phpMyAdmin的 【SQL】 标签页中执行以下查询,直接生成一个合并后的视图或临时表,然后导出这个结果。
SELECT g.id, g.arcty, g.guestbook, g.guestname, g.guestemail, g.guesttel, g.ip, g.dtime, g.ischeck, gb.reply, gb.replytime FROM dede_guestbook AS g LEFT JOIN dede_guestbookbook AS gb ON g.id = gb.bid ORDER BY g.id DESC;执行此查询后,在结果页面点击“导出”,即可导出这个合并后的查询结果。
编写PHP脚本导出(适合开发者,功能最强大)
如果您需要定期导出,或者需要更复杂的筛选条件,可以编写一个简单的PHP脚本来实现。
示例脚本 export_guestbook.php:
<?php
// 1. 数据库配置
$dbhost = 'localhost'; // 数据库地址
$dbuser = 'your_db_user'; // 数据库用户名
$dbpass = 'your_db_password'; // 数据库密码
$dbname = 'your_db_name'; // 数据库名
$dbprefix = 'dede_'; // 数据库表前缀
// 2. 连接数据库
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if (!$conn) {
die("数据库连接失败: " . mysqli_connect_error());
}
// 设置字符集
mysqli_set_charset($conn, "utf8");
// 3. 编写SQL查询(可以根据需要添加 WHERE 条件)
$sql = "SELECT g.id, g.guestname, g.guestemail, g.guestbook, g.dtime, gb.reply
FROM {$dbprefix}guestbook AS g
LEFT JOIN {$dbprefix}guestbookbook AS gb ON g.id = gb.bid
ORDER BY g.id DESC";
$result = mysqli_query($conn, $sql);
// 4. 设置CSV文件头,告诉浏览器这是一个CSV文件
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="guestbook_export_' . date('Ymd_His') . '.csv"');
// 5. 打开PHP输出流,写入CSV内容
$output = fopen('php://output', 'w');
// 写入CSV的表头(列名)
fputcsv($output, ['ID', '留言者', '邮箱', '留言内容', '留言时间', '回复内容']);
// 6. 循环查询结果,并写入CSV文件
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
// 为了防止CSV格式错乱,将换行符替换为空格或其他字符
$row['guestbook'] = str_replace(["\r\n", "\n", "\r"], " ", $row['guestbook']);
$row['reply'] = str_replace(["\r\n", "\n", "\r"], " ", $row['reply']);
fputcsv($output, $row);
}
}
// 7. 关闭资源
fclose($output);
mysqli_close($conn);
exit();
?>
使用方法:
- 将上面的代码保存为一个PHP文件,
export_guestbook.php。 - 修改文件开头的数据库配置信息(
$dbuser,$dbpass,$dbname,$dbprefix)。 - 将此文件上传到您DedeCMS网站的根目录。
- 在浏览器中访问
http://您的域名/export_guestbook.php。 - 浏览器会自动下载一个名为
guestbook_export_年月日_时分秒.csv的文件。
总结与建议
| 方法 | 优点 | 缺点 | 适用人群 |
|---|---|---|---|
| 后台导出 | 简单,无需技术知识 | 间接操作,格式不理想,数据量大时易卡顿 | 普通网站管理员,偶尔需要导出少量数据 |
| phpMyAdmin | 灵活,格式多(Excel/CSV),功能强大 | 需要登录服务器,合并数据需手动或SQL | 大多数用户,特别是需要处理和分析数据的用户 |
| PHP脚本 | 功能最强大,可定制,可自动化 | 需要一定的PHP和SQL知识 | 开发者,需要定期或按条件导出数据的场景 |
对于绝大多数用户,我强烈推荐【方法二:通过phpMyAdmin直接导出】,它在易用性和功能性之间取得了最好的平衡,导出的CSV文件用Excel打开后非常清晰,便于后续处理。
