用户注册网站时如何通过MySQL为空余额字段更新随机值?
修正方案
原有代码错误点
- SQL 中判断空值不能用
=运算符,Balance = null的判断结果恒为假,无法命中需要更新的记录,必须使用Balance IS NULL做空值判断 - 生成随机余额不需要嵌套
SELECT语句,可直接在赋值位置调用函数 - 未使用规范的预处理参数绑定,直接拼接
userID存在SQL注入风险
正确实现代码
// 预处理语句使用?作为占位符 $cursor = $MySQLdb->prepare("UPDATE users SET Balance = FLOOR(RAND() * 10000) WHERE Balance IS NULL AND userID = ?;"); // 绑定userID参数,示例为整型参数绑定,可根据你的数据库封装调整参数类型 $cursor->bind_param('i', $userID); // 执行更新 $cursor->execute();
可选优化
如果是用户注册插入新记录阶段触发该逻辑,可直接在INSERT语句中就指定Balance的值,无需额外执行UPDATE语句,减少一次数据库交互:
$cursor = $MySQLdb->prepare("INSERT INTO users (userID, username, password, Balance) VALUES (?, ?, ?, FLOOR(RAND() * 10000));"); // 绑定对应参数后执行即可
注:上述逻辑生成的余额范围是09999的整数,若需要调整范围可修改`RAND()`的乘数,比如需要010000的范围可改为
FLOOR(RAND() * 10001)
内容的提问来源于stack exchange,提问作者Bar Refael
相关产品推荐
相关产品推荐

