gpt4 book ai didi

php - 处理来自不同用户的同时 MySQL 查询

转载 作者:可可西里 更新时间:2023-11-01 08:37:00 25 4
gpt4 key购买 nike

我有一个 PHP/MySQL 注册系统,它限制了可以注册某些东西的人数。所以,假设有 5 个空位,其中 4 个已经满了。现在,登录的 2 个不同用户同时提交了一个表单,该表单执行 MySQL 查询以将该人添加到列表中。

简化后,PHP 逻辑类似于:

if($numberOfSpotsTaken < 5) {
//add user to list
}
else {
//don't add user to list
}

现在,因为两个用户同时提交请求,当代码检查占用了多少个点时,两者都小于 5。最终发生的情况是,两个请求都通过了,当限制应该是 5 人时,最终有 6 人出现在列表中。

如何防止这种情况发生,使同时提交请求的两个(或更多)用户无法绕过注册人数限制?

最佳答案

我能够通过使用 PDO 的 beginTransaction()rollBack()commit() 方法来解决这个问题,以防止超额预订.

简化,这是我所做的:

<?php

$db->beginTransaction();

//add to list
$sth = $db->prepare("INSERT INTO...");
$sth->execute();

//select count from list
$sth = $db->prepare("SELECT ... FROM ...");
$sth->execute();

//check to see whether the list is overbooked -- in this case, 5 is the list limit
if($sth->rowCount() > 5) {
$db->rollBack();
}
else {
$db->commit();
}

?>

关于php - 处理来自不同用户的同时 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9222244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com