猿问

用户数据有一半时间未插入数据库

在我的网站上,我有一个注册表格供新用户唱歌。

当我注册一个帐户,或者当我的朋友尝试它时,该过程成功并且数据入到数据库中。


问题在于,当来自世界各地的其他人注册帐户时,大部分时间都会发生这种情况:

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 上。


我现在不知道该去哪里寻找了,因为只有一部分注册过程失败了。

任何要研究的方向都是值得赞赏的。


慕斯王
浏览 93回答 1
1回答

尚方宝剑之说

我们再次经历了所有这一切,代码和数据库与少数登录用户失败并成功注册过程。问题不在于代码,而在于数据库本身。前面的维护者将存储 ip 的列设置为 varchar(32),该列对于 Ipv4 地址无效,但对于 IPv6 地址则不然。我们已将列更改为 varchar(64),因此地址再次适合。这似乎可以解决问题...除非有其他东西,但直到新用户尝试再次注册,我才会知道。仍然奇怪的是,错误没有记录在任何日志中。通过评论下给出的评论,我将尝试解释为什么它没有记录,它假装一切都很好,并且我将确保记录任何新的错误。感谢您的帮助。
随时随地看视频慕课网APP
我要回答