1
$prodqty = mysql_query("SELECT quan FROM pro_list WHERE auto_id = $pid"); //get the current product quantity
if (mysql_num_rows($prodqty) != 0)
{
    $row = mysql_fetch_array($prodqty);
    $productqty = $row['quan'];
}
$nqty = $productqty-$q; //current product quantity minus order quantity to get new product quantity

if ($nqty >= 0)
{  
    $query2="UPDATE pro_list SET quan = $nqty WHERE auto_id = $pid"; //update the quantity in the product table
    $result = mysql_query($query2);

    if ($result)
      echo "Successfully ";
    else
      echo "Unsuccesfully";
}
else
    echo "Limit of quantity! .";
}
die('Thank You For Shopping With i-Supply System! your order has been sent to Admin.!');
}

在庫は限界を超えていましたが、注文はまだデータベースに挿入されています。製品の数量がすでに制限を超えているため、注文をテーブル注文に挿入しないでください。お客様は再度注文する必要があります。なぜこれが起こるべきですか?

4

1 に答える 1

2

あなたのアプローチには根本的な欠陥があります。2 つ以上の更新が同時に試行されると、競合状態になります。次のように、チェックと更新を単一のクエリとして実行する必要があります。

$query="UPDATE pro_list SET quan=quan-$q WHERE auto_id=$pid and quan>=$q";

$result = mysql_query($query) or die(mysql_error());

if (mysql_affected_rows()  == 0) {
  echo "Out of stock!";
} 

いずれにしても、使用すべきではありませんmysql- 非推奨です。代わりにmysqliまたはを使用してください。PDO

于 2013-09-29T03:48:17.180 に答える