我很困惑,我的列值总是增加2而不是1。
登录失败时,将执行以下查询:
$sql_string = <<<SQL
IF (NOT EXISTS (SELECT * FROM failed_logins_user WHERE user_id = $user_id))
BEGIN
INSERT INTO failed_logins_user (user_id, attempts_count)
VALUES ($user_id, 1)
END
ELSE
BEGIN
UPDATE failed_logins_user
SET attempts_count = attempts_count + 1
WHERE user_id = $user_id
END
SQL;
预期:
实际:
有人可以看到我的错误在哪里吗?我是否弄错了IF / ELSE?
( user_id是主键,btw )
(PS:我对$ user_id使用参数绑定-我只是简化了查询的这一部分。)
答案 0 :(得分:1)
我会推荐更多类似的东西。
首先,从failed_logins_user
上的唯一索引开始:
create unique index unq_failed_logins_user_user_id on failed_logins_user(user_id);
然后先尝试更新,然后检查是否有任何更新:
DECLARE @rc INT;
UPDATE failed_logins_user
SET attempts_count = attempts_count + 1
WHERE user_id = @user_id; -- pass this value in as a parameter!
SET @rc = @@ROWCOUNT;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO failed_logins_user (user_id, attempts_count)
VALUES (@user_id, 1); -- pass this value in as a parameter!
END;
所有这些,我将每个失败的登录名保留在failed_logins_user
中。特别是,我需要故障的日期/时间,以及用户的设备/ IP地址。