如何防止某人使用促销代码两次?
问题:如何防止某人使用促销代码两次? 我有一个看起来像这样的数据库: 当用户想要使用促销代码时,它首先检查 used_promo 是否为空,这意味着用户之前没有使用过任何促销代码。 (用户只能使用 1 个促销代码) 我可以做这样的事情 SELECT used_promo FROM users WHERE id=5 然后我可以用 PHP 检查 used_promo 是否为空,如果是,我可以 UPDA
·
问题:如何防止某人使用促销代码两次?
我有一个看起来像这样的数据库:
当用户想要使用促销代码时,它首先检查 used_promo 是否为空,这意味着用户之前没有使用过任何促销代码。 (用户只能使用 1 个促销代码)
我可以做这样的事情
SELECT used_promo FROM users WHERE id=5
然后我可以用 PHP 检查 used_promo 是否为空,如果是,我可以
UPDATE users SET used_promo=2, balance=balance+100 WHERE id=5
是否有可能用户可以同时尝试多次使用促销代码,SELECT 会返回 used_promo 在设置为 2 之前为 null 并且余额将多次添加?
解答
在您描述的场景中,理论上可以多次使用促销代码。使用单个查询,如果更新成功,它将返回一个 id,否则没有行。
UPDATE users
SET used_promo=2, balance=balance+100
WHERE id=5 AND used_promo is null
RETURNING id;
更多推荐
已为社区贡献19918条内容
所有评论(0)