【发布时间】:2019-09-06 11:59:01
【问题描述】:
我很疑惑,我的列值总是加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;
预期:
- 第一次尝试失败时,将创建行,尝试次数 == 1
- 在第二次尝试失败时,更新该行,尝试次数 == 2
实际:
- 第一次尝试失败时,将创建行,尝试次数 == 2
- 在第二次尝试失败时,更新行,尝试次数 == 4
谁能看到我的错误在哪里?我是否弄错了 IF/ELSE?
(user_id 是主键,顺便说一句)
(PS:我使用 $user_id 的参数绑定 - 我只是简化了这部分查询。)
【问题讨论】:
-
听起来像(a)您无意中运行了两次查询(我们需要查看其余的 PHP 代码才能弄清楚)或(b)您可能有一个触发器正在更新值。
-
请不仅发布查询,还发布相关的PHP代码。您几乎可以肯定调用此查询两次,要么是由于 PHP 中的错误,要么是因为您在登录失败时处理了两个请求(可能是失败,也可能是重定向)。
-
你说@jasie,但你得到的行为表明不是。无论如何提供代码,以便我们可以消除这个原因。
-
解决了!评论者是对的:如果我重新加载页面,计数正确地增加 1,如果我使用登录按钮,则执行两次查询。有人会相信我,我没有编写 PHP 代码(带有查询的 func 除外)吗? WTF...谢谢@Nick 和 Ed Cottrell
-
@jasie 不幸的是,这个接近的原因有点误导。你的问题很切题。但是,您已经解决了问题,错误的原因在于代码中不属于您的帖子的一部分。在这些情况下,(1)你得到了帮助(耶!),(2)社区没有其他可以建设性的事情,(3)这个问题不太可能帮助其他人前进。我们将其搁置主要是为了让其他用户知道它不需要额外的答案。
标签: php sql sql-server increment