我尝试检查用户已提交的尝试登录信息。由于某些原因,它跳过甚至很难我在我的数据库中有7个条目,达到+1的尝试,具有类似的IP和print...
。
这是我的查询,可以找到完整代码here。
user_id
用户怎么跳过这部分?
图片: 表结构
表格
我的代码
VAR_DUMP结果
答案 0 :(得分:4)
来自phpdoc:
PDOStatement :: rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。
如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序。
请注意不要使用rowCount
进行select
次查询的建议。相反,我会改变你的代码:
$sql = "
SELECT count(*) AS attempt_nr
FROM users_login_attempts
WHERE user_id = :userid
AND time > DATE_ADD(NOW(), INTERVAL -1 HOUR)
AND user_ip = :userip
";
$results = $db_connect->prepare($sql);
if ($results->execute(array(':userid' => $user_id,':userip' => $remote_ip))) {
$row = $results->fetch(PDO::FETCH_ASSOC);
$count_tries = $row['attempt_nr'];
if ($count_tries < 5) {
// DO SOMETHING IF LIMIT IS NOT REACHED
}
else {
// RETURN FAILURE
}
}
此外,请注意,如果代码正常运行,即使用户成功登录,您也可以在5次登录尝试失败后有效锁定用户,因此您还需要确保清除成功登录失败的历史记录或使您的SQL更复杂以解决这个问题。