1

これをできるだけ簡単にするようにします。関数で throw/catch を使用しています。この関数は、名前、説明、およびユーザーの配列を受け取ります。名前と説明を 1 つのテーブルに追加し、ユーザーの配列を取得して、それらをコネクタ テーブルに追加するための別の関数を実行します。最後のユーザーが入力されるまで自動コミットをオフにしてからコミットするように機能を設定しました。問題は、(外部キー制約のために) ユーザーの 1 人がログインに失敗した場合、トランザクションがバックアウトされないことです。別の関数を呼び出しているという事実は、自動コミットを「リセット」し、意図したとおりに機能しませんか? ロールバックを Catch 句に入れて間違っていますか?

try
{
    autocommit=0
    run insert query
    if query fails: throw error, rollback
    else
      for count of array
        run another function (this function does more SQL and throws its own errors if it fails)

    autocommit=1
}

catch
{
    rollback, autocommit=1;
    display error
}

コードを単純化しすぎていないことを願っています。どんな助けでも大歓迎です。

4

1 に答える 1

0
$this->dbh->beginTransaction();
try {
    // do stuff

    $this->dbh->commit();
} catch (PDOException $e) {
    $this->dbh->rollBack();
    throw $e;
}
于 2012-12-19T04:26:44.420 に答える