我有一个安全问题。我认为锁定一个表将是一个解决方案,只是我不知道如何在 MySQL、PHP 中正确执行它,并且没有足够的时间搜索 Google 和文档了。
因此,任务:
创建一个数据库并编写一个 php 代码以随机获取彩票。
我有一个表,它只包含几行。(身份证、姓名、数量)
例如:
1 - 没有获胜 - 20000
2 - Hello Kitty 包 - 200
3 - 一支非常漂亮的笔 - 50 等等。
我写了 php,所以逻辑如下:
1) 从数据库中获取每张门票的数量,并创建一个包含间隔的 PHP 数组,例如:
no win: 20000,
Hello Kitty bag: 20200,
一支非常不错的笔: 20250.
2) 生成一个从 1 到最大的随机数,这样我就知道用户拿到了什么票。
3)更新数据库:从正确的行中减去1。
现在,这很好用,但是问题是:
如果我有大量用户,并且其中两个或三个同时点击,随机相同的数字,(假设它是 hello kitty)但只有 1 个那个项目?
他们三个都从数据库中减去,而不是在 0 处停止。(在这个例子中,我们将有 -2 hello kitty bag)
大问题,至少对我来说。
所以总而言之,我的问题是:
1)我怎样才能从选择中锁定表格,直到我准备好减去?这是一个很好的解决方案吗?
2)我可以使它成为一个查询,还是 MySQL 无法处理?
3)其他解决方案?
我很感激每一个答案,真的!
在此先感谢,也很抱歉发了这么长的帖子,但想保持直截了当。
[已解决]
我使用了存储过程,这是详细信息。我的服务器版本高于 5.x 很幸运,因为当我阅读时,MyISAM 系统仅支持此版本以上的存储过程。我将在这里编写一些代码,希望将来有人会发现它有用:
delimiter //
CREATE PROCEDURE `name`(IN a_parameter INT(20))
DECLARE some_text VARCHAR(50) DEFAULT '';
#now using all this stuff
SELECT `name` INTO some_text FROM `users_table` WHERE `table_id` = a_parameter;
SELECT some_text
END//
delimiter ;