在我的网站上,我有一个注册表格供新用户唱歌。当我注册一个帐户,或者当我的朋友尝试它时,该过程成功并且数据入到数据库中。问题在于,当来自世界各地的其他人注册帐户时,大部分时间都会发生这种情况:1)该过程成功,没有抛出任何错误。但是2)没有数据插入到数据库中。数据库连接是通过以下方式创建的:// Connecting to the database$database = new mysqli($DatabaseServer, $DatabaseUser, $DatabasePass, $DatabaseName);在注册过程中,数据通过以下方式插入:$stmt = $database->prepare("INSERT INTO `users` (`username`, `password`, `email`, `email_activation_code`, `name`, `active`, `ip`, `date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");$stmt->bind_param('ssssssss', $_POST['username'], $password, $_POST['email'], $email_code, $_POST['name'], $active, $_SERVER['REMOTE_ADDR'], $date);$result = $stmt->execute();$stmt->close();到目前为止,我已经尝试过:- 使用VPN从多个位置注册,并从不同的物理位置注册,都成功了。- 我已经记录了注册失败时使用的数据(具有用户的权限)。没有什么奇怪的,当我使用他的数据时,我可以完美地注册一个帐户。在执行此操作时,我们俩都在同一时间尝试了它,而我打开了数据库,因此我确信数据库当时正在运行(或者由于缺少连接而应该引发错误)。- 我试图做一个日志,结果什么都没有(因为没有抛出任何错误)。-使用“尝试捕获”的正常错误捕获也会导致任何结果,因为同样,不会抛出任何错误。$stmt->error_list在将数据库更新到 mariadb 10.3.20 后,我注意到了这个问题。它现在在版本 10.3.22 上。我现在不知道该去哪里寻找了,因为只有一部分注册过程失败了。任何要研究的方向都是值得赞赏的。
1 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
我们再次经历了所有这一切,代码和数据库与少数登录用户失败并成功注册过程。
问题不在于代码,而在于数据库本身。前面的维护者将存储 ip 的列设置为 varchar(32),该列对于 Ipv4 地址无效,但对于 IPv6 地址则不然。我们已将列更改为 varchar(64),因此地址再次适合。这似乎可以解决问题...除非有其他东西,但直到新用户尝试再次注册,我才会知道。
仍然奇怪的是,错误没有记录在任何日志中。通过评论下给出的评论,我将尝试解释为什么它没有记录,它假装一切都很好,并且我将确保记录任何新的错误。
感谢您的帮助。
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消