检查用户是否在过去一小时内注册

时间:2010-01-15 22:04:16

标签: php mysql

我有这段代码来检查用户是否在过去一小时内创建了一个帐户:

$result = mysql_query("SELECT * FROM accounts WHERE registration_ip = '$_SERVER[REMOTE_ADDR]' AND created > ".(time() - 3600));

if (mysql_num_rows($result) > 0)
    exit('Blablal')

它不会像我想要的那样退出,我可以创建我想要的帐户数量。

你看到任何一个重要的问题?我的db表和字段是正确的

7 个答案:

答案 0 :(得分:1)

你的问题可能是这个,$ _SERVER [REMOTE_ADDR]

您将其直接嵌入双引号字符串中。如果要在双引号字符串中访问数组,则需要将变量数组访问放在一对花括号中。

更正后的字符串:

“SELECT * FROM accounts WHERE registration_ip ='{$ _SERVER ['REMOTE_ADDR']}'并创建>”。(time() - 3600)

另外,总是引用索引,你使用了REMOTE_ADDR而不是'REMOTE_ADDR'或“REMOTE_ADDR”

希望这有帮助。

答案 1 :(得分:1)

我现在把这些空间搞得很好

registration_ip='$_SERVER[REMOTE_ADDR]'

答案 2 :(得分:0)

通过删除registration_ip = '$_SERVER[REMOTE_ADDR]'子句来测试它。

答案 3 :(得分:0)

此外,您的SQL查询AND created > ".(time() - 3600));无法获得最后一小时。 你想要这样的东西:

SELECT ... WHERE ... 
AND created > DATE_SUB(now(), INTERVAL 1 HOUR)

答案 4 :(得分:0)

我在本地进行了测试,对我而言,它的行为符合预期。我会说问题不在你的查询中,而是在其他地方。检查您的数据并确保按预期插入数据。

此外,您可能希望使用SELECT COUNT来计算列而不是SELECT * - 它应该更快。


  $result = mysql_query("SELECT COUNT(*) FROM accounts WHERE registration_ip = '$_SERVER[REMOTE_ADDR]' AND created > ".(time() - 3600));

  $count = mysql_fetch_array($result);
  if ($count[0] > 0) exit('BLAH');

答案 5 :(得分:0)

亚达的回答是正确的。我要做的唯一其他评论是你使用mysql_real_escape转义$ _SERVER [REMOTE_ADDR]来防止SQL注入,因为变量被覆盖的可能性很小

答案 6 :(得分:0)

您需要在嵌入到PHP的SQL中使用{}。我认为这应该有效。我总是这样做,因为我发现它节省了我的时间调试,因为它似乎经常弹出。

$result = mysql_query("SELECT COUNT(*) FROM accounts WHERE registration_ip = '{$_SERVER[REMOTE_ADDR]}' AND created > ".({time()} - 3600));

如果这不起作用,请将查询保存到变量中,将其回显到页面以查看其发送的内容。

$sql = "SELECT COUNT(*) FROM accounts WHERE registration_ip = '{$_SERVER[REMOTE_ADDR]}' AND created > ".({time()} - 3600)";

echo $sql;