假设我有一个网站,当访问时,显示今天你的幸运字.问题是每个单词都可以只为一个人幸运,所以你需要快速访问网站.以下是带有幸运字的示例表:
+---------------------+ | lucky_word | +---------------------+ | cat | | moon | | piano | | yellow | | money | +---------------------+
我的问题是:如何防止两个(或更多)用户同时访问该表.我假设每个用户从现有表中读取第一个lucky_word,并且立即删除所选单词,因此它不会是下一个用户的幸运单词.例如,我想避免将猫展示给多个访客.
解决方法
您可以在
transaction内使用
locking read;例如,使用PDO:
$pdo = new PDO('MysqL:charset=utf8;dbname='.dbnAME,USERNAME,PASSWORD); $pdo->beginTransaction(); $word = $pdo->query('SELECT lucky_word FROM myTable LIMIT 1 FOR UPDATE') ->fetchColumn(); $pdo->prepare('DELETE FROM myTable WHERE lucky_word = ?') ->execute(array($word)); $pdo->commit();