我遇到 MySQL 错误,指示缺少列。然而,在 phpMyAdmin 中,提到的列明显存在于数据库中

问题描述 投票:0回答:1

我已经在我的 PHP4 托管环境中成功安装了旧版论坛脚本 VBulletin 2。虽然我承认使用 PHP4 存在潜在的安全问题,但我的目的是恢复我最初创建的论坛之一。

尽管如此,论坛运行顺利,允许我执行所有必要的操作。但是,我在尝试访问用户面板时遇到错误。

vBulletin 2.3.11 中数据库错误:
无效 SQL:SELECT privatemessage.*,touser.username AS tousername,fromuser.username AS fromusername,icon.title AS icontitle,icon.iconpath
FROM 私人消息,用户 AS touser,用户 AS fromuser
左连接图标打开 icon.iconid=privatemessage.iconid
WHERE privatemessage.userid='1'
并且文件夹 ID=0
AND touser.userid=privatemessage.touserid
AND fromuser.userid=privatemessage.fromuserid
并且消息已读=0
按日期行 DESC 排序

mysql 错误:“on 子句”中存在未知列“privatemessage.iconid” mysql 错误号:1054

我可以发布一个新线程,但当我回答它时,我收到此错误:

Database error in vBulletin 2.3.11:
Invalid SQL: SELECT user.*, style.templatesetid
            FROM subscribethread,user,usergroup
                LEFT JOIN style ON (IF(user.styleid=0, 1, user.styleid)=style.styleid)
            WHERE subscribethread.threadid='1'
            AND subscribethread.userid=user.userid
            AND usergroup.usergroupid=user.usergroupid
            AND user.userid<>'1'
            AND user.usergroupid<>'3'
            AND usergroup.canview = 1
            AND user.lastactivity>'1703928997'

mysql error: Unknown column 'user.styleid' in 'on clause'
mysql error number: 1054

通过 PhpMyAdmin 检查后,我确认这些列确实存在。尽管得到了这一确认,但我对问题的根本原因感到困惑。有人可以提供帮助或见解吗?

我尝试重新创建该列并更改顺序,但没有任何反应。

php mysql vbulletin
1个回答
0
投票

您将逗号式 JOIN 和显式 JOIN 结合起来。逗号式 JOIN 的优先级低于显式 JOIN。所以你的

FROM subscribethread,user,usergroup
LEFT JOIN style ON (IF(user.styleid=0, 1, user.styleid)=style.styleid)

事实上

FROM subscribethread,user,
(
                          usergroup
LEFT JOIN style ON (IF(user.styleid=0, 1, user.styleid)=style.styleid)
)

很明显,在添加的括号中对

user
表(添加括号的外部)的引用是不合法的。

最简单的修复方法 - 将逗号替换为

CROSS JOIN
:

FROM subscribethread
CROSS JOIN user
CROSS JOIN usergroup
LEFT JOIN style ON (IF(user.styleid=0, 1, user.styleid)=style.styleid)
© www.soinside.com 2019 - 2024. All rights reserved.