ゲームで対戦相手を割り当てるための簡単な設定があります。基本的に、matchIDがゼロ(値は他の場所からのもの)の場合、新しい一致を作成する必要があり、最後のmatchIDレコードに対してmysql selectを実行して、一致を待機している人がいるかどうかを確認します。
プレーヤーが待機しているかどうかを確認するために、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')");
}
}
かなり経験の浅い人としての私の懸念は、私が見る限り、情報の選択と情報の更新の間に遅延があり、技術的には2つのmysqlselectが使用される同じmatchIDを返す可能性があることです。また、matchID + 1を変数として使用する場合でも、データベースに作成された自動インクリメントのmatchIDと同期していない可能性があるため、リスクがあります。
私の恐れは根底にあるのでしょうか、それともコードが速すぎて確率を心配する価値がないのでしょうか?
心配な場合はどうすればよいですか?