已排期 后台创建用户不成功时,UID也在增加 [复制链接]

二级用户组

后台创建用户不成功时,UID也在增加,按理应该连续。

是因为插件还是都有这个问题

然后我升级数据库可以创建成功一个账号,之后就提示创建失败,需要重新升级一次数据库,才可以继续创建

1.png

Bug反馈
程序版本:
Xiuno X 最新版
PHP版本:
php8.0
MySql:
8.0
复现步骤:
后台——用户管理——创建用户——创建失败 UID也在增加
预期结果:
UID应该是的连续
Bug 描述:
后台创建用户不成功时,UID也在增加
错误信息:
错误日志:
最新回复
  • xiunox 一级用户组

    UID 不连续是 MySQL 自增列的常见特性:当 INSERT 失败或事务回滚时,AUTO_INCREMENT 不会回退,所以跳过 ID 属正常现象,并非插件或程序缺陷——所有基于 InnoDB 的应用(如 WordPress)都这样。

    但“升级数据库后才能创建一个账号”才是真问题。可能原因:

    1. 表结构或字段默认值在严格模式下不兼容,首次插入后某些字段值耗尽(如唯一索引冲突);
    2. 触发器或存储过程报错。

    请提供:

    • 创建失败时的具体报错信息(后台提示或 PHP 错误日志);
    • PHP/MySQL 版本;
    • 是否安装过用户相关插件,并尝试禁用后测试。

    这才是定位问题的关键。【 AI 自动回复,仅供参考】

    4小时前
    爱马仕 五级用户组 回复@xiunox

    自增不回滚这块楼上说得对,InnoDB 的 AUTO_INCREMENT 在 INSERT 失败时不会回退,跳号是正常的,所有用自增主键的程序都这样。

    但“升级一次数据库只能建一个号”这个不是 MySQL 特性,是程序 bug。查了一下:

    bbs_user 表的 nickname 字段是唯一索引(升级脚本里加的 ADD UNIQUE INDEX nickname)。而后台创建用户的时候只传了 username/email/password/gid,没传 nickname,导致 nickname 默认存成空字符串 ''。第一个空串能插进去,第二个空串就撞唯一索引,报 Duplicate entry '',创建直接失败。

    为什么升级完又能建一个?因为升级流程里的“昵称字段迁移”步骤会执行 UPDATE user SET nickname=username WHERE nickname='',把空串全填掉,腾出空位来——所以每升级一次,你就能成功建一个号,再建又撞。

    不是插件的问题,内核逻辑就有,前台注册是带了 nickname=>username 的,后台创建漏了。临时绕过:后台建号前手动给 nickname 字段填个值就行,等官方补丁。

    3小时前
  • 贰先生 社区元老金冠神 管理员组

    本来想让你问问ai “后台创建用户不成功时,为什么数据库的 UID(自增主键)还在增加,而不是保持连续?”,但是上边已经给了答案.
    创建失败的问题我查一下

    4小时前
  • 贰先生 社区元老金冠神 管理员组

    创建用户失败的问题已经定位到
    着急的话自己改下model/user.func.php
    117行的user_create

    function user_create($arr) {
    	// hook model_user_create_start.php
    	global $conf;
    	 
    	if(!isset($arr['nickname']) || $arr['nickname'] === '') {
    		$arr['nickname'] = isset($arr['username']) ? $arr['username'] : '';
    	}
    	$r = user__create($arr);
    	
    	// 全站统计
    	runtime_set('users+', 1);
    	runtime_set('todayusers+', 1);
    	
    	// hook model_user_create_end.php
    	return $r;
    }
    
    2小时前

请先登录后再回复 登录

uid:106 二级用户组
关注
VPSLT.COM
发帖 6
评论 11
粉丝 0
关注 1
发新帖
目录
后台创建用户不成功时,UID也在增加
本站服务器由 酷鸭 赞助
TraeWork AI 办公平台
此广告位招租
广告招租
广告招租
广告招租
广告招租
广告招租