私のプロジェクトでは、多くのテーブルにわたって多くの行を削除および更新するため、トランザクションを使用することにしました。ただし、エラーが発生してスクリプトが終了している場合でも、トランザクションはコミットされます。
そのサーバーではサポートされていないため、mysqli_またはPDOではなくmysql_のみを使用します。
mysql_query("START TRANSACTION");
$res = mysql_query("some insert...");
if($res === false){
//this save error log and exit script with die() or exit()
trigger_error(mysql_errno()."\n".mysql_error());
}
$res = mysql_query("some delete...");
if($res === false){
trigger_error(mysql_errno()."\n".mysql_error());
}
mysql_query("COMMIT");
私のプロジェクトでは、mysql のクラスを持っているので、このように入力しませんが、このように動作します。
最初のクエリ エラーが発生した後、エラー ログが保存され、終了スクリプトが終了します。ただし、挿入されたデータはDBに残ります。ただし、COMMIT
実行されずに接続が閉じられると、自動的にROLLBACK
発生します。
PS mysqli を使用する方が良いことはわかっていますが、これはmysql_とmysqli_についても同じですよね?