【问题标题】:User data not inserted in the database half of the times用户数据有一半没有插入数据库
【发布时间】:2020-05-24 07:44:13
【问题描述】:

在我的网站上,我有一个供新用户使用的注册表单。
当我注册一个帐户时,或者当我的朋友尝试时,该过程成功并且数据被插入到数据库中。

问题在于,当来自世界各地的其他人注册帐户时,大多数情况下会发生这种情况:
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 的日志,结果一无所获(因为没有抛出错误)。
- 使用“try catch”捕获正常错误也不会产生任何结果,因为同样不会引发任何错误。

我在将数据库更新到 mariadb 10.3.20 后注意到了这个问题。现在是 10.3.22 版本。

我现在不知道该去哪里找了,因为只有一部分注册过程失败了。
任何研究方向都值得赞赏。

【问题讨论】:

  • 所以您有无法插入的数据日志,但您无法使用相同的数据复制问题?
  • @PaulSpiegel 正确。当用户使用他的数据时,它会失败。当我使用相同的数据时,它会成功。
  • @FarzadRastgarSani 我已经遇到过这个话题。这些文件是正确的,并且没有从连接中抛出或列出任何错误。在那个主题中,数据插入总是失败。这里没有。
  • 如果您在 php.ini 文件中启用,您的服务器将向错误 log_file 抛出一个自动错误,(在大多数服务器上默认启用)您可以在 Cpanel 或错误 log_file 中检查,当然您看不到任何错误日志文件中的错误?

标签: php mysql database mysqli mariadb


【解决方案1】:

我们再次处理了所有这些,代码和数据库以及少数登录失败并成功注册过程的用户。

问题不在于代码,而在于数据库本身。以前的维护者将存储 ip 的列设置为 varchar(32),这对于 IPv4 地址来说是足够的,但对于 IPv6 地址来说是不够的。 我们已将该列更改为 varchar(64),因此地址再次适合。这似乎解决了问题……除非有其他问题,但直到新用户再次尝试注册时我才会知道。

在任何日志中都没有记录错误仍然很奇怪。使用 cmets 下给出的 cmets,我将尝试了解为什么它没有被记录,它假装一切都很好,并且我将确保记录任何新的错误。
感谢您的帮助。

【讨论】:

  • varchar(64) 应设置为 (255) 以防万一
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多