2016-03-20 1 views
0

これは私のAndroidアプリケーションに接続するPHP Serviceに接続していて、すぐに2つのクエリを実行します。私は1つが失敗したかどうかを検出する方法を読んだことがあります。イベントスロットが既に0で、INT unsignedであるため、私の1つが失敗することがわかりました。PHP PDO - 複数のステートメント - 1が失敗した場合、他を実行しない

ただし、他のステートメントは成功し、実行されます。明らかに、私は両方を実行したいだけです.1が失敗すると、don't execute anything at allが、私のアプリケーションにエラーを返します。

ステートメントの1つが失敗し、STOP the otherが実行されていない場合、どうすれば検出できますか?私はおそらく複数のステートメントを使用することを避けることができますし、それがOKであったかどうかを確認してからもう一度実行します。私は複数のステートメントでそれを達成することはできますか?

クエリ

"INSERT INTO GuestList(EventID, AccountID) VALUES (7, (SELECT AccountID FROM Accounts WHERE Username = 'test')); 
UPDATE Events SET EventSlots = EventSlots-1 WHERE EventID = 7 ;" 
+0

トランザクションを使用するhttp://php.net/manual/en/pdo.begintransaction.php – JimL

+0

最初の文が(書いたように)失敗した場合は、なぜ何かを実行する必要がありますか?すべての情報が含まれているので、あなたはそれを実行することを知っています。 – arkascha

+0

ありがとう@ジム私はそれらについて知りませんでした。非常に役に立つと思われる、私は今それらを試してみましょう。そして、 'arkascha'、私は特定のユースケースをテストしているので、これを知っています。ユーザーがすでに利用可能な0スロット(私は知っているが、彼はそうではない)のイベントに参加しようとすると、アプリケーションでハンドラを実装するためにEventSlotsを0に設定します。 – iBobb

答えて

1

使用PDO取引http://php.net/manual/en/pdo.transactions.php。トランザクションは、アトミックな方法で実行する必要がある一連のクエリを表します。トランザクション中に何かが失敗した場合、自動的に初期状態にロールバックします。

関連する問題