flarum论坛使用FoF Doorman邀请注册返回500错误解决方法
声明
本文涉及修改数据库,请先进行 备份数据库 备份数据库 备份数据库
测试环境
flarum版本:1.4.0
数据库:mariaDB10 + phpmyadmin面板
此处用phpmyadmin作为演示,如果没用phpmyadmin请根据相关命令进行
报错内容如下
500
POST https://mydomain.com/register
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY' in /mydomain/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:117
Stack trace: //这段提示用户序号0已经占用
Next Doctrine\DBAL\Driver\PDO\Exception: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY' in /mydomain/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Exception.php:18
Stack trace:
Next Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY' (SQL: insert into `users` (`username`, `email`, `password`, `joined_at`, `invite_code`, `nickname`) values (google, google@gmail.com, $2y$10$iTGR/768X2TcqhrvHQagqOZxasRvkO/v9D3w0ajUzLfSTx4ZIy/ki, 2022-08-15 02:29:28, GITZAAI, ?)) in /mydomain/vendor/illuminate/database/Connection.php:712
Stack trace:
#0 /mydomain/vendor/illuminate/database/Connection.php(672): Illuminate\Database\Connection->runQueryCallback()
重点是这句Duplicate entry ‘0’ for key ‘PRIMARY’
经过flarum群友耐心解答,发现是数据库user表格的ID被占用了,再深入研究,原来用户ID缺少了自动递增 导致ID序号都是一样,所以无法注册。
因为创建flarum论坛时候,我的第一个管理员ID序号是1,添加了一个ID序号是0的用户,导致无法直接添加 自动递增 这个字段。
名词解析:Auto increment,自动递增,如果有开启的,在数据库里,额外(Extra) 这栏显示AUTO INCREMENT,进入修改是用AI,有一个选择框开启或者关闭。
给id添加自动递增的方法
进入flarum数据库,打开user表 ,点击id那一栏右边的修改,在AI栏打勾,保存。
情况一
如果提示:
#1062-ALTER TABLE causes auto_increment resequencing,resulting in duplicate entry '1' for key 'PRIMARY'
则需要把用户序号1改为其他,再
情况二
如果提示:
#1833 - Cannot change column 'id':used in a foreign key constraint 'post_reactions_user_id_foreign' of table 'flarumdb.post_reactions
这是因为post_reactions的外键已经引用了,所以需要进入post_reactions里面,把post_reactions_user_id_foreign这条外键删掉,等修改完id递增后再补上这条外键。
最终结果如下