私は現在、ポートフォリオプロジェクトの一環としてオークションのウェブサイトを開発しており、解決できないような面白い問題を抱えています。MySQLトランザクション - オークション入札INSERTがキュー内で処理されましたか?
現時点で現在現在の最高入札価格(クエリ1)を確認しており、入札額が現在格納されている入札価格よりも高い場合は、新しい入札単価をデータベース(クエリ2)に挿入しています。かなり基本的なロジックですが、明らかに入札単価が低い場合は、最終的にユーザーに通知されます。
Query 1:
$result = mysql_query("SELECT * FROM bids WHERE item_id = '".$_POST['id']."' ORDER BY bids.amount DESC LIMIT 1");
Query 2:
$query = sprintf("INSERT INTO bids(item_id,buyer_id,amount,created) VALUES('%s','%s','%s',NOW())",
mysql_real_escape_string($item_id),
mysql_real_escape_string($user_id),
mysql_real_escape_string($amount));
注:チェックのギャップの間に状況が存在しますただし、私は確信がもてない私はこのコードの重大なセキュリティ上の問題がある知っているが、これは単なる一例です...
データベースに挿入すると、別のクエリが実際に速くなり、データベースに挿入され、現在の入札ロジックが破損する可能性があります。
mysqliまたはPDOドライバとのトランザクションを使用して、入札が正しくキューに入れられるようにしますか?
MySQLは、これが起こらないようにmysqlクエリをキューに入れる方法を提供していますか?
を更新する
tempBid
から落札金額を取得します。行をロックすることは、間違いなく問題を解決する一つの方法です! –