私は今、私のシステムで膨大なリアルタイムトラブルを抱えています。サブスクリプションを登録できるとします。最大3人の参加者としましょう。 3人に達すると、皆のために購読を終了しなければなりません!これは私のコードの一部です:私の最後のサブスクリプションでサブスクリプションが閉鎖されません
function subscription_data($subid) // activated by ajax
{
$sql = 'SELECT subEnrolled, subStatus FROM subscription WHERE subID=:subid';
$stmt = $db->prepare($sql);
$stmt->bindparam("subid", $subid);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$subEnrolled = $row['subEnrolled'];
$subParticipants = '3';
// is this subscription already closed ???
if (!($row['subStatus'] =='1')) // if '1' not run anymore
{
if($subEnrolled+1 == $subParticipants)
{
$status1 = '1'; // close subscription for the NEXT fire
$sql = 'UPDATE subscription SET subStatus=:substatus WHERE subID=:subid';
$stmt = $db->prepare($sql);
$stmt->bindparam("subid", $subid);
$stmt->bindparam("substatus",$status1);
$stmt->execute();
}
//
// DO SOMETHING MORE
//
// Add to one enrollment
$add1enroll = '1';
$sql = 'UPDATE subscription SET subEnrolled=subEnrolled+:subenrolled WHERE subID=:subid';
$stmt = $db->prepare($sql);
$stmt->bindparam("subenrolled", $add1enroll);
$stmt->bindparam("subid", $subid);
$stmt->execute();
}
}
私の問題は、私は、例えばよりも前に、このサブスクリプションを閉じるしたいということです3人が登録します。しかし、私のAJAXボタンをクリックして複数のアカウント(4)でファンクションを起動すると、実際には3つのうち4つの登録ができます。上記の- これを避けようとしました。サブスクリプション。それは動作しません。
私の変数を理解したいと考えて、できるだけ論理的にしようとしました。上記のコードはtransaction()
の関数の中にあり、一般的にInnoDBテーブルを使用していますが、これを変更しても同じ問題があります。
サブスクリプションの数はどのように把握していますか? – Terminus
を ''してください ''私は ''サブスクリプション ''テーブルを更新し、関数が実行されるたびに1つの登録を追加します。関数の起動時に、この番号(登録番号)を抽出し、それを変数 '$ subEnrolled'に入れます。上記は説明のためのものです –
サブスクリプションを閉じても登録を追加しているようです。それはおそらく問題を引き起こします。 – Terminus