下面我将为你详细分析这个问题的常见原因和对应的解决方法,你可以按照从易到难的顺序逐一排查。

问题根源分析
在 Dedecms 中,一篇文章的数据通常存储在两个地方:
- 主表 (
dede_archives):存储文章的基本信息,如标题、作者、发布时间、栏目ID等。 - 附加表 (
dede_addonarticle):存储文章的详细内容,如文章正文、关键词、图片等。
“读取附加信息出错” 就是指程序在 dede_archives 表中找到了一条记录,但在尝试从对应的 dede_addonarticle 表中读取内容时失败了,这通常是由于以下几个原因造成的:
解决方法(按推荐顺序排查)
检查文章附加内容是否为空(最常见)
这是最常见的原因之一,在后台编辑文章时,可能不小心清空了编辑器里的内容,或者文章本身就是没有正文内容的。
排查步骤:

- 登录你的 Dede 后台。
- 进入“[核心]” -> “[内容管理]” -> “[所有文档列表]”。
- 找到并点击报错的那篇文章的标题,进入编辑模式。
- 检查文章正文(
body)字段是否为空,如果为空,请填入内容并保存。
如何批量处理? 如果文章很多,手动检查很麻烦,你可以通过直接操作数据库来查找和处理这些“空内容”的文章。
-
登录你的数据库管理工具(如 phpMyAdmin)。
-
找到你的 Dede 数据库。
-
执行以下 SQL 查询,找出所有正文为空的文章ID:
(图片来源网络,侵删)SELECT a.id, a.title FROM dede_archives AS a LEFT JOIN dede_addonarticle AS d ON a.id = d.aid WHERE d.body = '' OR d.body IS NULL;
-
查询结果会列出所有没有附加内容的文章,你可以根据这些 ID,回到后台逐一补充内容,或者如果这些文章无用,可以直接删除。
检查数据库表关联是否正常
文章的 aid(文章ID)是连接主表和附加表的桥梁,如果附加表中缺少了对应 aid 的记录,或者 aid 不匹配,就会出错。
排查步骤:
-
使用 phpMyAdmin 进入你的数据库。
-
检查
dede_archives表和dede_addonarticle表。 -
执行以下 SQL 查询,看看是否有文章在主表中有记录,但在附加表中没有记录:
SELECT a.id, a.title FROM dede_archives AS a LEFT JOIN dede_addonarticle AS d ON a.id = d.aid WHERE d.aid IS NULL;
-
如果查询结果有数据,说明这些文章的附加信息丢失了。
- 修复方法:对于这些文章,你需要回到后台编辑它们,让系统自动在附加表中创建一条对应的记录,只需打开文章编辑页面,不用修改任何内容,直接点击“保存”即可。
检查数据库表是否存在或损坏
如果附加表 dede_addonarticle 被误删了,或者数据库表结构损坏了,也会导致此错误。
排查步骤:
- 在 phpMyAdmin 中,检查你的数据库列表,看看是否存在
dede_addonarticle这个表。 - 如果表存在,尝试点击“浏览”该表,看是否能正常显示数据,如果报错,说明表可能已损坏。
- 如果表不存在,说明被误删了。
修复方法:
- 表被误删:这是比较严重的问题,如果你有完整的数据库备份,请立即从备份中恢复,如果没有备份,你需要重新创建这个表,你可以在另一台干净的 Dede 安装中找到
dede_addonarticle的结构定义(通常在/data/dede_sql/目录下),然后执行它来重建表,重建后,文章内容就丢失了,只能靠备份恢复。 - 表结构损坏:同样,最佳方案是从备份恢复。
检查 dede_addonarticle 表中的 body 字段
body)字段是 TEXT 或 LONGTEXT 类型,如果里面的内容包含了非法的字符,或者超出了字段的最大长度限制,也可能导致读取失败。
排查步骤:
- 在 phpMyAdmin 中,直接浏览
dede_addonarticle表。 - 找到报错文章对应的记录,查看
body字段的内容。 - 检查是否有乱码、不完整的 HTML 标签(如
<p>没有对应的</p>)或者超大内容。
修复方法:
- 如果发现内容异常,可以直接在数据库里将
body字段的内容清空,然后回到后台重新编辑文章。 - 过长导致的问题,可以考虑将
dede_addonarticle表中的body字段类型从TEXT修改为LONGTEXT(LONGTEXT可以存储更大的内容,最大支持 4GB)。
检查 PHP 配置
非常大,可能会超出 PHP 的处理限制,导致读取失败。
排查步骤:
- 在你的服务器上,找到
php.ini配置文件。 - 检查以下两个参数的值:
memory_limit:PHP 内存限制,对于大文章,建议设置为256M或更高。post_max_size:POST 数据最大大小,建议也设置为256M或更高。
修复方法:
修改 php.ini 文件后,需要重启你的 Web 服务器(如 Apache 或 Nginx)才能生效。
检查模板文件调用
虽然错误提示是“读取附加信息”,但有时也可能是模板文件在调用附加信息时使用了错误的标签或逻辑,导致程序在读取后无法正确处理,从而显示出错信息。
排查步骤:
- 找到报错页面对应的模板文件(通常在
/templets/目录下)。 - 检查模板中调用文章正文和附加信息的标签,
{dede:field.body/}{dede:field.description/}{dede:field.keywords/}
- 确保标签的使用是正确的,没有拼写错误。
修复方法: 如果发现模板标签有误,请修正它。
总结与排查流程建议
遇到“Dede 读取附加信息出错”,建议按照以下流程快速定位问题:
- 第一步(最可能):去后台检查文章正文是否为空,这是 80% 以上的原因。
- 第二步(其次可能):用 SQL 查询检查主表和附加表的关联是否丢失(
LEFT JOIN查找)。 - 第三步(检查环境):确认数据库表是否存在且正常,检查 PHP 的
memory_limit配置。 - 第四步(终极手段):如果以上方法都无效,考虑从最近的数据库备份中恢复,这是最安全、最彻底的解决方法。
希望这些详细的步骤能帮助你成功解决问题!
