【发布时间】:2010-06-03 00:02:51
【问题描述】:
我正在尝试为网站上的登录页面创建反暴力破解程序。不幸的是,我的查询没有按预期工作。我想测试一个 IP 地址尝试登录的次数,并返回用户的 ID 以供我在登录过程中进行下一步。
但是,我的查询有问题...一方面,如果它与他们之前尝试登录的用户相同,则只会返回行。我需要它成为任何用户。其次,无论我使用LEFT JOIN、RIGHT JOIN、INNER JOIN还是JOIN,它都不会返回用户的ID,除非login_attempts中有用户的行。
SELECT COUNT(`la`.`id`),
`u`.`id`
FROM `users` AS `u`
LEFT JOIN `login_attempts` AS `la` ON `u`.`id` = `la`.`user_id`
WHERE `u`.`username` = 'admin'
AND `la`.`ip_address` = '127.0.0.1'
AND `la`.`timestamp` >= '1'
这是DESC login_attempts的输出
Field Type Null Key Default Extra
id int(10) unsigned NO PRI NULL auto_increment
user_id int(10) unsigned NO MUL NULL
ip_address varchar(15) NO MUL NULL
timestamp int(10) NO NULL
这个查询做同样的事情,除了如果login_attempts中有一行与之对应,甚至不选择ID:
SELECT COUNT(`la`.`id`),
`u`.`id`
FROM `users` AS `u`
LEFT OUTER JOIN `login_attempts` AS `la` ON `u`.`id` = `la`.`user_id`
AND `la`.`ip_address` = '127.0.0.1'
AND `la`.`timestamp` >= '1'
WHERE `u`.`username` = 'admin'
【问题讨论】:
-
为什么
LOGIN_ATTEMPTS.timestamp是一个字符串?请将输出发布自:DESC LOGIN_ATTEMPTS。 -
一个字符串只是因为我不确定语法。但是,我通过脚本发送变量的方式将其作为有符号整数发送,它就是这样。一秒钟,我会发布描述。
-
有用的链接解释连接如果你还没有看到它:codinghorror.com/blog/2007/10/…
-
我已经看过了,我尝试了我认为会首先工作的那个,它没有,我尝试了其余的,但正如我在我的问题中所说的那样,它们都没有按预期工作。
-
您确定
LOGIN_ATTEMPTS中的数据的时间戳值都为1 或更大,并且ip_address为127.0.0.1?从那里开始,然后逐步添加您需要的内容。