CPanel共享主机安装FaucetInABox遇SQL错误求助
问题分析与解决方案
错误1:SQL语法错误(IF NOT EXISTS不支持)
原因
共享主机搭载的MySQL版本低于8.0,而ALTER TABLE ADD COLUMN IF NOT EXISTS是MySQL 8.0才引入的语法,低版本不兼容该写法,导致语法报错。
解决步骤
- 登录CPanel,打开文件管理器,定位到
/home/faucetl8/public_html/bnb/script/install.php - 找到第222行的
ALTER TABLE语句,移除其中的IF NOT EXISTS关键字。例如原语句:
修改为:ALTER TABLE `FaucetTable` ADD COLUMN IF NOT EXISTS `first_used` timestamp NOT NULL DEFAULT current_timestamp()ALTER TABLE `FaucetTable` ADD COLUMN `first_used` timestamp NOT NULL DEFAULT current_timestamp()
错误2:重复列名(users_returned已存在)
原因
安装脚本未判断列是否已存在就重复执行添加操作,触发Duplicate column name错误。
解决步骤
根据MySQL版本选择对应处理方式:
方式1:MySQL 8.0及以上版本
在添加users_returned列的语句中保留IF NOT EXISTS,确保仅当列不存在时执行添加:
ALTER TABLE `FaucetTable` ADD COLUMN IF NOT EXISTS `users_returned` [替换为该列的原始定义,例如INT(11) NOT NULL DEFAULT 0]
方式2:MySQL 8.0以下版本
由于低版本不支持IF NOT EXISTS,需通过代码先判断列是否存在,再执行添加:
将第222行的原始ALTER TABLE语句替换为以下PHP代码:
// 检查first_used列是否存在,不存在则添加 $checkFirstUsed = $pdo->query("SHOW COLUMNS FROM `FaucetTable` LIKE 'first_used'"); if (!$checkFirstUsed->rowCount()) { $pdo->exec("ALTER TABLE `FaucetTable` ADD COLUMN `first_used` timestamp NOT NULL DEFAULT current_timestamp()"); } // 检查users_returned列是否存在,不存在则添加 $checkUsersReturned = $pdo->query("SHOW COLUMNS FROM `FaucetTable` LIKE 'users_returned'"); if (!$checkUsersReturned->rowCount()) { // 替换下方[]内的内容为该列的原始定义 $pdo->exec("ALTER TABLE `FaucetTable` ADD COLUMN `users_returned` [例如INT(11) NOT NULL DEFAULT 0]"); }
最终操作
修改完成后保存install.php,重新访问站点即可完成安装。
内容的提问来源于stack exchange,提问作者Ithoughtiwouldneverneedstack
相关产品推荐
相关产品推荐

