我似乎无法找到问题。
// Check that someone from this IP didn't register a user within the last hour (DoS prevention)
$query = mysqli_query($dbc, "SELECT COUNT(id) FROM accounts WHERE registration_ip = '".$_SERVER['REMOTE_ADDR']."' AND registered > ".(time() - 3600));
if (mysqli_num_rows($query) > 0) {
$errors[] = 'To prevent registration flooding, at least an hour has to pass between registrations from the same IP. Sorry for the inconvenience.';
}
为什么无论如何总能恢复原状?即使帐户表是空的。
答案 0 :(得分:6)
如果我没弄错的话,你的数据总是在1行说出计数的值(因为你正在使用计数)。
答案 1 :(得分:2)
即使有0行符合您的条件,它也会简单地返回。
+-----------+
| COUNT(id) |
+-----------+
| 0 |
+-----------+
因为你想要count
行。它的0
。因此,一行。
这是你应该如何处理它。
$row = mysqli_fetch_row($query));
$count = intval($row[0]);
mysqli_free_result($query);
if ($count > 0)
....
答案 2 :(得分:1)
您正在检查返回的行而不是值。所以检查一下
$row = mysqli_fetch_row($query));
$count = $row[0];
if ($count > 0)
{
}