PbootCMS 升级后 SQL 错误解决方案

COS、CDN

在将 PbootCMS 从 v3.0.5 及以下版本升级到 v3.0.6 后,可能会遇到以下两个 SQL 错误:

  1. 错误:no such column: def1
  2. 错误:duplicate column name: picstitle

这两个错误都是由于升级过程中某些 SQL 语句未正确执行,导致数据库缺少必要的字段或存在重复字段。以下是详细的解决方案。

一、错误:no such column: def1

描述:

  • 在后台栏目管理操作中出现提示:执行 SQL 发生错误!错误:no such column: def1

原因:

  • PbootCMS v3.0.6 版本追加了几个新字段,但在升级过程中,def1def2def3 字段未成功添加到 ay_content_sort 表中。

解决方案:

  1. 手动执行 SQL 语句:

    • 使用 SQLite 数据库管理工具(如 DB Browser for SQLite)或命令行工具连接到 PbootCMS 的 SQLite 数据库。

    • 执行以下 SQL 语句来添加缺失的字段:

      sql
       
      -- 新增多图标题字段 ALTER TABLE ay_content ADD COLUMN picstitle TEXT(1000) NOT NULL DEFAULT ''; -- 栏目新增三个描述备用字段 ALTER TABLE ay_content_sort ADD COLUMN def1 TEXT(1000) NOT NULL DEFAULT ''; ALTER TABLE ay_content_sort ADD COLUMN def2 TEXT(1000) NOT NULL DEFAULT ''; ALTER TABLE ay_content_sort ADD COLUMN def3 TEXT(1000) NOT NULL DEFAULT '';
  2. 步骤:

    • 打开 SQLite 数据库管理工具。
    • 连接到 PbootCMS 的 SQLite 数据库文件(通常位于 data/database.db)。
    • 在 SQL 编辑器中粘贴上述 SQL 语句并执行。

二、错误:duplicate column name: picstitle

描述:

  • 在后台操作中出现提示:执行 SQL 发生错误!错误:duplicate column name: picstitle

原因:

  • 在升级过程中,picstitle 字段被重复添加到 ay_content 表中。

解决方案:

  1. 手动删除重复字段:

    • 使用 SQLite 数据库管理工具连接到 PbootCMS 的 SQLite 数据库。

    • 执行以下 SQL 语句来删除重复的字段:

      sql
       
      -- 删除重复的 picstitle 字段 ALTER TABLE ay_content RENAME TO ay_content_old; CREATE TABLE ay_content ( id INTEGER PRIMARY KEY AUTOINCREMENT, sortid INTEGER NOT NULL DEFAULT 0, title TEXT(255) NOT NULL DEFAULT '', keywords TEXT(255) NOT NULL DEFAULT '', description TEXT(1000) NOT NULL DEFAULT '', content TEXT NOT NULL DEFAULT '', author TEXT(100) NOT NULL DEFAULT '', source TEXT(100) NOT NULL DEFAULT '', picurl TEXT(255) NOT NULL DEFAULT '', picstitle TEXT(1000) NOT NULL DEFAULT '', flag TEXT(100) NOT NULL DEFAULT '', hits INTEGER NOT NULL DEFAULT 0, istop INTEGER NOT NULL DEFAULT 0, isred INTEGER NOT NULL DEFAULT 0, ishot INTEGER NOT NULL DEFAULT 0, isnew INTEGER NOT NULL DEFAULT 0, status INTEGER NOT NULL DEFAULT 0, sdate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, edate DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', link TEXT(255) NOT NULL DEFAULT '' ); INSERT INTO ay_content (id, sortid, title, keywords, description, content, author, source, picurl, picstitle, flag, hits, istop, isred, ishot, isnew, status, sdate, edate, link) SELECT id, sortid, title, keywords, description, content, author, source, picurl, picstitle, flag, hits, istop, isred, ishot, isnew, status, sdate, edate, link FROM ay_content_old; DROP TABLE ay_content_old;
  2. 步骤:

    • 打开 SQLite 数据库管理工具。
    • 连接到 PbootCMS 的 SQLite 数据库文件(通常位于 data/database.db)。
    • 在 SQL 编辑器中粘贴上述 SQL 语句并执行。
COS、CDN
热门