帖子封面图插件bug修复。。。

黄黄 8月前 727

111

帖子封面图插件不好使,上传提示“目录创建失败”

搜代码发现这段代码:

    if (!is_dir($path)) {
        mkdir($path, 0755, true);
    } else {
        message(-1, '目录创建失败');
    }

这个逻辑有问题,先注释掉吧,就可以上传了。

需要注意的是,这段代码逻辑中有一个潜在的逻辑错误:如果目录已经存在,按照正常逻辑,这应该是一个成功的情况,而不是显示“目录创建失败”的错误信息。一个更合理的处理可能是在目录存在时什么都不做,或者显示一个“目录已存在”之类的消息,而不是当前的错误处理逻辑。

然后发现帖子发布后,封面图数据并没有写入数据库。
看了下插件安装代码,写入数据库这句

db_exec("ALTER TABLE `{$tablepre}thread` ADD COLUMN IF NOT EXISTS `cover` varchar(2048) NOT NULL DEFAULT '' COMMENT '封面图网址'");

直接在phpmyadmin里运行也会报错。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXISTS `cover` varchar(2048) NOT NULL DEFAULT '' COMMENT '封面图网址' at line 1

这个错误消息说明在尝试执行的ALTER TABLE语句中存在语法错误。正如我之前提到的,ADD COLUMN IF NOT EXISTS是一个非标准的扩展,实际上并不被MySQL支持。这就是为什么你遇到了这个语法错误的原因。

原理先不管了,直接改下数据库,不判断存不存在了。

ALTER TABLE `bbs_thread` ADD COLUMN `cover` VARCHAR(2048) NOT NULL DEFAULT '' COMMENT '封面图网址'

通过以上两个操作,帖子封面图插件功能基本恢复正常!

希望作者下一个版本修复一下。

TAGS

最新回复 (3)
  • Geticer 8月前
    0 引用 2

    谢谢,并解决了;使用ADD COLUMN “IF NOT EXISTS”是怕这个列已经被定义了(据我所知有一个插件也用了类似名字的列)

  • 黄黄 8月前
    0 引用 3
    Geticer 谢谢,并解决了;使用ADD COLUMN “IF NOT EXISTS”是怕这个列已经被定义了(据我所知有一个插件也用了类似名字的列)
    需要注意的是,正如上述所提,ADD COLUMN IF NOT EXISTS并不是所有数据库系统都支持的标准SQL语法。在某些数据库管理系统(如MySQL),尝试添加一个已存在的列会导致错误。因此,在执行这类操作之前,最好先检查列是否已经存在,或者在应用程序逻辑中处理可能发生的错误。如果你使用的数据库系统不支持IF NOT EXISTS语法,那么你可能需要编写一些额外的代码来避免尝试添加已存在列时的错误。

    简单说就是IF NOT EXISTS不兼容,可能有些数据库是支持的。或者你换个名字,比如huanglongjiang_cover
  • Geticer 8月前
    0 引用 4
    黄黄 需要注意的是,正如上述所提,ADD COLUMN IF NOT EXISTS并不是所有数据库系统都支持的标准SQL语法。在某些数据库管理系统(如MySQL),尝试添加一个已存在的列会导致错误。因此,在 ...
    我用的AI也是这么说的,所以我最终才决定加“IF NOT EXISTS”
返回
发新帖