Php MSSQL int增量为1:增量为2而不是1

Php MSSQL int增量为1:增量为2而不是1,php,sql,sql-server,increment,Php,Sql,Sql Server,Increment,我很困惑,我的列值总是增加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

我很困惑,我的列值总是增加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;

$sql\u string=我会推荐类似的东西

首先,从
失败的\u登录\u用户
上的唯一索引开始:

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\u logins\u user
中。特别是,我想知道故障的日期/时间,也许还有用户的设备/IP地址。

听起来像是(a)您无意中运行了两次查询(我们需要查看PHP代码的其余部分才能找到答案)或者(b)您可能有一个正在更新值的触发器。请不仅发布查询,还发布相关的PHP代码。您几乎肯定会调用此查询两次,要么是由于PHP中的一个错误,要么是因为您正在处理两个登录失败的请求(可能是一个失败,也可能是一个重定向)。无论如何都要提供代码,这样我们才能消除这个原因。解决了!评论者是对的:如果我重新加载页面,计数将正确地增加1,如果我使用登录按钮,查询将执行两次。有谁会相信我,我没有编写PHP代码(除了带有查询的func)?世界跆拳道联盟。。。谢谢@Nick和EdCottrell@jasie不幸的是,这一接近的理由有点误导。你的问题是关于主题的。但是,您已经解决了这个问题,错误的原因在于您的帖子中没有包含的代码。在这种情况下,(1)你得到了帮助(耶!),(2)社区没有其他建设性的事情可以做,以及(3)这个问题不太可能帮助其他人前进。我们搁置它主要是为了让其他用户知道它不需要额外的答案。谢谢。我确实将datetime作为表中的第三列,我只是从代码中删除它以保持简单。但您的建议很好-不要使用count,而是将每个失败的登录尝试添加为行。但是每个用户最多可以添加10或20行,而不是一行,所以这有点贪婪。我想知道:计算行数比从尝试中提取值快吗?@jasie。即使使用正确的索引,计算行数显然也会更加耗时。关键是关于每个失败登录的详细信息可能是相关的。