为什么它会回归真实?

时间:2012-11-11 20:59:36

标签: php

我似乎无法找到问题。

// 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.';
}

为什么无论如何总能恢复原状?即使帐户表是空的。

3 个答案:

答案 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)
{

}