我已经在我的 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 检查后,我确认这些列确实存在。尽管得到了这一确认,但我对问题的根本原因感到困惑。有人可以提供帮助或见解吗?
我尝试重新创建该列并更改顺序,但没有任何反应。
您将逗号式 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)