在经历了一次博客数据自我消亡之后(其实就是没续费,因为我以为以后不会继续写。)
后面又经历想搭建博客,到处找网盘的备份。不过还是找到了一部分大概是2008-2012年。之后就把博客的数据定期备份保护的很好。
这次typecho破天荒的升级到了1.30,我以为一切都会很顺利,但是过程真是曲折尤其对我会更难一些。
因为我是一点都不懂,只会把备份还原点点鼠标。成功不成功就是天意了。这次偏偏就是曲折,首先按照官方的操作流程,上去写好数据库的数据后就错误,显示数据库有admin,然后我有曲线救国直接进后台,但又显示服务器错误,但又发现可以访问插件设置页面。
我以为是我的插件有问题,又手打进了插件页面关闭了所有插件还是老样子。
我又换到默认主题,还是一样这就让我不知所措了,就开始了ai,然而ai也没有给我一个什么好的解决办法。只是在用ai告诉我屏蔽报错,在config.inc.php配置里面添加了屏蔽报错的代码才正常。但又面临新的问题就是用了屏蔽代码后,评论全部不显示了。这时候ai才告诉我我数据库有问题。
然后就不断的反复的来回还原备份,折腾了几个小时。
还是没有进展,最后在用默认主题的时候发现右边挂件栏有错误的代码,在多少行里面用ai的办法这才又修复,处理完这个问题ai告诉我百分百我的数据库有问题。
Warning: Trying to access array offset on value of type null in : Trying to access array offset on value of type n…/www/wwwroot/lag.la/var/Widget/Base/Comments.php on line 478
欢迎加入 Typecho 大家族
就开始解决这个问题
问题原因分析
这个问题通常发生在:
- 评论关联的文章已被删除
- 数据库数据不一致
- 缓存数据问题
建议:修复代码后,可以检查数据库中是否有 cid(评论所属文章ID)不存在于 contents 表中的评论记录。
验证修复
修复后,你可以在页面模板中添加调试信息来验证:
<?php if (!$this->parentContent): ?>
<!-- 评论关联的文章不存在 -->
<?php endif; ?>这样修复后,即使 $this->parentContent 为 null,也不会再出现数组访问错误,而是会使用默认的评论文本 $this->text。
然后又出现
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'name' 升级过程中出现的
问题总结
- 数据库表都正常(OK)
- 有1个孤立评论(可能是被删除文章的评论)
- 有1个无效的关系记录(可能是被删除文章的分类关系)
解决方案
第一步:清理孤立数据
-- 1. 删除孤立评论(没有对应文章的评论)
DELETE FROM typecho_comments
WHERE cid NOT IN (SELECT cid FROM typecho_contents);
-- 2. 删除无效的关系记录
DELETE FROM typecho_relationships
WHERE cid NOT IN (SELECT cid FROM typecho_contents)
OR mid NOT IN (SELECT mid FROM typecho_metas);
-- 3. 验证清理结果
SELECT COUNT(*) as orphaned_comments FROM typecho_comments c
LEFT JOIN typecho_contents p ON c.cid = p.cid
WHERE p.cid IS NULL;
SELECT COUNT(*) as invalid_relations FROM typecho_relationships r
LEFT JOIN typecho_contents c ON r.cid = c.cid
LEFT JOIN typecho_metas m ON r.mid = m.mid
WHERE c.cid IS NULL OR m.mid IS NULL;然后ai又给我写了个升级脚本,经过几次修改后 终于完美升级。
但我检查
1 MyISAM utf8mb3_general_ci 9.2 KB 'database' => 'root',
'engine' => 'InnoDB',
'sslCa' => '',一个是数据库 一个是config的配置文件 这样是否能行
我的数据库是myisam config配置文件写的是innodb这不转换过来我晚上都得失眠。
然后又是一通折腾。
谁叫我是一个完美主义者呢?