2016-10-12 4 views
0

トランザクション中です。失敗するたびにロールバックする必要がありますか?コミットせずにスクリプトを終了するだけで十分ですか?

$transactionfailed = false; 
$mysqliconn->query("begin;"); 
//query 1 
$result=$mysqliconn->query("insert into table(col1,col2) values('$val1','val2')"); 
if(!$result){$transactionfailed=true;} 
//query 2 
$result=$mysqliconn->query("insert into table2(col1,col2) values('$val1','val2')"); 
if(!$result){$transactionfailed=true;} 
if($transactionfailed){$mysqliconn->query("rollback;");} 
else{$mysqliconn->query("commit;");} 
die(); 

は、私はそれを交換したい私はこのコードがあるとし、この1

$mysqliconn->query("begin;"); 
//query 1 
$result=$mysqliconn->query("insert into table(col1,col2) values('$val1','val2')"); 
if(!$result){die("error");} 
//query 2 
$result=$mysqliconn->query("insert into table2(col1,col2) values('$val1','val2')"); 
if(!$result){die("error");} 
$mysqliconn->query("commit;"); 
die(); 

私は間違って何かがにmysqlデータベースに応じて、ロールバックまたはコミットせずに起こった場合、スクリプトを終了させたいですコミットしなかった場合はトランザクションをロールバックします。

私は何度も試してみましたが、コミットせずに終了するとトランザクションをロールバックします。 はこれはいつも安全ですか?。または私が見逃す何かがある。なぜなら私はquery2が失敗し、query1が1日後にコミットされることを望んでいないからです。

+0

安全です。そうでなければ、結果は世界規模で非常に悲惨なものになるでしょう。 – apokryfos

答えて

0

私はのtry/catchブロックを使用することをお勧めし、
プットは、tryブロックの前にクエリを「開始」
は、tryブロックで、あなたの「挿入」クエリを置く
無い場合はcatchブロック
であなたの「ロールバック」クエリを置きますクエリーがtryブロック内で最後にtryブロック内で失敗しました
catchブロック内のtryブロック 'rollback'でクエリーが1回失敗した場合(beginクエリー後のすべてのクエリーがロールバックされます)

関連する問題