オンラインの php マニュアルを読みましたが、これら 2 つの関数 (mysqli::commit と mysqli::rollback) がどのように機能するかはまだわかりません。
私がしなければならない最初のことは、次のことです。
$mysqli->autocommit(FALSE);
次に、いくつかのクエリを作成します。
$mysqli->query("...");
$mysqli->query("...");
$mysqli->query("...");
次に、これら 3 つのクエリで構成されるトランザクションを次のようにコミットします。
$mysqli->commit();
しかし、これらのクエリの 1 つが機能しないという不幸なケースでは、3 つのクエリはすべてキャンセルされますか、それとも自分でロールバックを呼び出す必要がありますか? 3 つのクエリすべてをアトミックにし、1 つのクエリと見なしたいと考えています。1 つのクエリが失敗した場合、3 つすべてが失敗し、何の効果もありません。
私がこれを尋ねているのは、マニュアル ページで見たコメントの中で、http: //php.net/manual/en/mysqli.commit.php クエリの 1 つが失敗した場合、ユーザー Lorenzo がロールバックを呼び出すためです。
3 つのクエリがアトミックな場合、ロールバックは何に役立ちますか? 理解できない。
編集:これは私が疑わしいコード例です:
<?php
$all_query_ok=true; // our control variable
$mysqli->autocommit(false);
//we make 4 inserts, the last one generates an error
//if at least one query returns an error we change our control variable
$mysqli->query("INSERT INTO myCity (id) VALUES (100)") ? null : $all_query_ok=false;
$mysqli->query("INSERT INTO myCity (id) VALUES (200)") ? null : $all_query_ok=false;
$mysqli->query("INSERT INTO myCity (id) VALUES (300)") ? null : $all_query_ok=false;
$mysqli->query("INSERT INTO myCity (id) VALUES (100)") ? null : $all_query_ok=false; //duplicated PRIMARY KEY VALUE
//now let's test our control variable
$all_query_ok ? $mysqli->commit() : $mysqli->rollback();
$mysqli->close();
?>
クエリのいずれかが失敗した場合$all_query_ok==false
、トランザクションが処理されなかったためにロールバックを行う必要がないため、このコードは間違っていると思います。私は正しいですか?