遇到的问题
很多站长把 PbootCMS 从旧版本(比如 3.2.5)升级到新版后,打开网站直接白屏或报错(具体数据库报错信息需要配置'debug' => 1,):
数据库执行错误,请稍后重试或联系管理员! 或者 执行SQL发生错误!错误:Key 'ay_content_sort_scode' doesn't exist in table 'b'

后台也可能打不开,或者打开后各种页面报错。别慌,这是 PbootCMS 升级时最常见的一个坑,不用重装、不用还原网站,照着下面的步骤 3 分钟就能修好。
为什么会这样(大白话版)
先解释一下,你才好理解后面要做什么。
新版 PbootCMS 程序查询数据库时,为了速度,"点名"要求数据库走某几个索引(你可以把索引理解成图书的目录/快递的分拣台,让查找更快)。
但你的网站是从旧版升上来的,旧版数据库里压根没有建这几个"分拣台"。程序点名要用,数据库一查:没这个索引!于是当场报错,整站打不开。
那个报错里的 table 'b' 不是真的有一张表叫 b,是程序写 SQL 时给栏目表起的简称,不用管它,我们要做的就是:把缺的几个索引补上。
开始修复前,先准备两样东西
能进数据库后台:宝塔面板 → 数据库 → phpMyAdmin(或用 Navicat 也行)
你的站点数据库:进 phpMyAdmin 后,在左侧点选你自己的站点数据库(不是点表,是点数据库名)
⚠️ 安全提醒:操作前建议先在 phpMyAdmin 里点"导出",把数据库备份一份到本地。改索引本身很安全,但备份是好习惯,尤其数据多的时候。
修复步骤(跟着做就行)
第一步:打开 SQL 执行窗口
选中数据库后,点顶部导航的 "SQL" 标签页,会出来一个可以输入 SQL 的文本框。
第二步:粘贴下面的代码,点"执行"
-- 第一步:旧版表字段是 tinytext,新版要求 varchar(20),先转换(若报错可跳过) ALTER TABLE `ay_content_sort` MODIFY `scode` varchar(20) NOT NULL; ALTER TABLE `ay_model` MODIFY `mcode` varchar(20) NOT NULL; -- 第二步:补上缺失的三个索引 ALTER TABLE `ay_content_sort` ADD UNIQUE KEY `ay_content_sort_scode` (`scode`); ALTER TABLE `ay_model` ADD UNIQUE KEY `ay_model_mcode` (`mcode`); ALTER TABLE `ay_content_ext` ADD KEY `ay_content_ext_contentid` (`contentid`);
第三步:回到网站刷新
执行完没有任何红色报错,就回去刷新你的网站首页。正常情况下,网站已经恢复正常了。
怎么确认真的修好了?
这段代码其实干了三件事,你可以对照检查:
表 | 加的索引 | 作用 |
|---|---|---|
|
| 按栏目编码快速找栏目 |
|
| 按模型编码快速找模型 |
|
| 按内容ID快速找扩展信息 |
三个索引全部建好,新版程序的查询就能正常跑了。
常见问题(遇到再看)
Q1:执行时提示"BLOB/TEXT column used in key specification without a key length"? 说明你的表字段还是 tinytext 类型,先把代码里"第一步"那两行转换字段的语句执行掉,再执行第二步。如果你的站本来就是较新版本,字段已经是 varchar(20),第一步执行会报错,忽略它,直接执行第二步就行。
Q2:提示"Duplicate key name"(索引已存在)? 说明这个索引已经建好了,属于重复操作,忽略即可,不影响。
Q3:我的数据库表前缀不是 ay_,怎么办? PbootCMS 默认表前缀是 ay_,但你安装时可能改过(比如 pb_、mypb_)。把上面代码里的 ay_content_sort 等表名,替换成你自己的前缀即可。怎么确认前缀?看报错里出现的表名就行。
Q4:修复完还有别的报错? 说明升级时还差其他东西(比如新字段、新表没建)。这种情况建议:登录后台 → 找到系统的在线升级功能,让它把增量升级完整跑一遍;或者直接找官方升级包里的 SQL 升级脚本手动执行。
Q5:补索引会不会影响我已有的文章和栏目数据? 不会。 索引只是数据库的"目录",不动你的数据本身。唯一要注意的是:如果栏目编码(scode)有重复或超长,加唯一索引会失败,这种概率极低(正常 PbootCMS 的栏目编码都不重复、都很短)。
怎么提前避免以后再遇到
升级前先备份数据库(phpMyAdmin 导出,或宝塔面板自动备份)
升级时别只覆盖程序文件,最好走后台的"在线升级"流程,它会自动把数据库升级 SQL 一起执行掉
升级完第一时间打开首页 + 后台各测一遍,发现问题趁早修,别等上线了才发现
本文适用于 PbootCMS 3.2.x 各版本之间升级(如 3.2.5 → 新版)时,报错 Key 'ay_content_sort_scode' doesn't exist in table 'b' 的修复。