2

私は現在、PHP / MySQL でフォーラムを作成するためのチュートリアルに従っています...そして、それを私の CodeIgniter プロジェクトに実装しようとしています。

これまで対処したことのない障害、トランザクションに遭遇しました... codeignitersトランザクションに関するドキュメントを読みましたが、変換する必要があるコードを考えると、それを本当に理解していません。

誰かが以下のコードを取得して、それを codeigniters トランザクション コードに変換できるかどうか疑問に思っていました。自分でやってみましたが、複数のテーブルを使用していて、完全に混乱しています。

コードは以下のとおりです。

$query = "BEGIN WORK;";
$result = mysql_query($query)

if(!$result) {
    echo 'An error has occured';
} else {
    $sql = "INSERT INTO topics(t_subeject,date,cat) VALUES ($_POST['subject'],NOW(),$_POST['cat'])";
    $result = mysql_query($sql);

    if(!$result) {
        echo 'An error has occured';
        $sql = "ROLLBACK;";
        $result = mysql_query($query)
    } else {
        $topid = mysql_insery_id();
        $sql = "INSERT INTO posts(content, date) VALUES ($_POST['content'],NOW())";
        $result = mysql_query($sql);

        if(!$result) {
            echo 'An error has occured';
            $sql = "ROLLBACK;";
            $result = mysql_query($sql);
        } else {
            $sql = "COMMIT;";
            $result = mysql_query($sql);
            echo 'Insert successful!';
        }
    }
}
4

1 に答える 1

2

INSERTが失敗した場合、自動的にROLLBACKを実行します。そもそもトランザクションを使用しているのはそのためです。明示的にチェックする必要はありません。したがって、最終的には、これですべてになるはずです。

$this->db->trans_start();
$this->db->query("INSERT INTO topics(t_subeject,date,cat) VALUES ($_POST['subject'],NOW(),$_POST['cat'])");
$topid=$this->db->insert_id();
$this->db->query("INSERT INTO posts(content, date) VALUES ($_POST['content'],NOW())");
$this->db->trans_complete();

...モデルクラス内から。したがって、最初のINSERTがすでに失敗している場合、2番目のINSERTは実行されません。

http://ellislab.com/codeigniter/user_guide/database/transactions.html

于 2012-11-17T12:26:18.853 に答える