我有一个简单的设置,用于在游戏中分配对手。基本上如果 matchID 为零(值来自其他地方),则需要创建一个新的匹配项,并且它将对最后一个 matchID 记录执行 mysql 选择以确定是否有人在等待匹配项。
要查看玩家是否在等待,我们可以查看 teamB 空间是否为零(未占用)。但是,如果 teamB 有值,则没有人在等待,并且必须与该玩家创建一个新的匹配作为“团队 A”。
代码如下:
if ($matchID == 0)
{
$teamBquery = $conn ->query("SELECT matchID,teamBID,teamAID FROM challengeMatches ORDER BY matchID DESC LIMIT 1 ");
$teamBarray = $teamBquery->fetch(PDO::FETCH_ASSOC);
$teamBID=$teamBarray[teamBID];
$matchID=$teamBarray[matchID];
$teamAID=$teamBarray[teamAID];
if ($teamBID == 0){
$newChallenge = $conn ->query ("UPDATE challengeMatches SET managerBID='$managerID', teamBID='$teamID',matchStatus=1 WHERE matchID='$matchID'");
}else{
$filler = 0;
$matchID = $matchID+1;
$newChallenge = $conn ->query ("INSERT INTO challengeMatches (matchID,managerAID,managerBID,matchStatus,teamAID,teamBID) VALUES ('','$managerID','$filler','$filler','$teamID','$filler')");
}
}
作为一个非常缺乏经验的人,我担心的是,据我所知,在选择信息和更新信息之间会有延迟,因此从技术上讲,两个 mysql 选择可能会返回要使用的相同 matchID。然后即使使用 matchID+1 作为变量也是有风险的,因为它可能与在数据库中创建的自动增量 matchID 不同步。
我的恐惧是有根据的还是代码如此之快以至于概率不值得担心?
如果我应该担心我该怎么办?