データベースと1つのテーブル(innoDB):テーブルがあります。
このテーブルの行は、m1とm2です。
1ページに2つの送信ボタンがあります。
送信1はこれを行います:
Database::q('UPDATE table SET m1 = ?s, m2 = ?i WHERE id = ?i', $n, 0, $ID);
送信2はこれを行います:
Database::q('UPDATE table SET m2 = ?s WHERE id = ?i', $n2, $ID);
問題:ユーザーが両方のフォームを同時に送信した場合。送信1で100000($ n)、送信2で50($ n2)としましょう。更新後の結果は、m1で99 950、m2で100000になります。
どうすればこれを防ぐことができますか?トランザクションを使用してみましたが、それでも正しく機能しません。
この構文は正しいですか?実行、クエリ、実行のいずれかをいつ使用するかわかりません。
try {
Database::beginTransaction();
Database::q('..');
Database::commit();
} catch (Exception $e) {
Database::rollBack();
echo 'ERROR!';
}
これは私が使用しているデータベースクラスです:http: //pastebin.com/PfsiYysX