ホームページ >バックエンド開発 >PHPチュートリアル >PHP で MySQL トランザクションを効果的に管理するにはどうすればよいですか?

PHP で MySQL トランザクションを効果的に管理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-19 10:41:16162ブラウズ

How to Manage MySQL Transactions Effectively in PHP?

PHP MySQL トランザクションの例

PHP と MySQL のトランザクションを使用すると、一連のクエリを単一のアトミックな作業単位としてグループ化できます。これは、クエリの 1 つが失敗した場合、トランザクションによって行われたすべての変更がロールバックされることを意味します。

トランザクションの使用方法

PHP でトランザクションを使用するには、 MySQL の場合、次の操作を行う必要があります。

  1. mysql_query("SET を呼び出してトランザクションを開始する) AUTOCOMMIT=0") および mysql_query("START TRANSACTION")。
  2. クエリを実行します。
  3. すべてのクエリが成功した場合は、mysql_query("COMMIT") を呼び出してトランザクションをコミットします。
  4. いずれかのクエリが失敗した場合は、呼び出してトランザクションをロールバックします。 mysql_query("ROLLBACK").

PHP と MySQL でトランザクションを使用する方法の簡単な例を次に示します。

mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");

$a1 = mysql_query("INSERT INTO rarara (l_id) VALUES('1')");
$a2 = mysql_query("INSERT INTO rarara (l_id) VALUES('2')");

if ($a1 and $a2) {
    mysql_query("COMMIT");
} else {        
    mysql_query("ROLLBACK");
}

この例では、$a1 と $a2 の両方が成功した場合にのみ COMMIT ステートメントが実行されます。いずれかのクエリが失敗した場合、ROLLBACK ステートメントが実行されます。

PDO でのトランザクションの使用

PDO クラスは、より現代的でオブジェクト指向の操作方法を提供します。 MySQL トランザクション。 PDO でトランザクションを使用するには、次の操作を行う必要があります。

  1. PDO オブジェクトを作成し、PDO::ATTR_ERRMODE 属性を PDO::ERRMODE_EXCEPTION に設定します。
  2. $ を呼び出してトランザクションを開始します。 pdo->beginTransaction().
  3. を実行します。
  4. すべてのクエリが成功した場合は、$pdo->commit() を呼び出してトランザクションをコミットします。
  5. いずれかのクエリが失敗した場合は、を呼び出してトランザクションをロールバックします$pdo->rollback().

PDO でトランザクションを使用する方法の例を次に示します:

try {
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->beginTransaction();

    $pdo->exec("INSERT INTO rarara (l_id) VALUES('1')");
    $pdo->exec("INSERT INTO rarara (l_id) VALUES('2')");

    $pdo->commit();
} catch (\PDOException $e) {
    $pdo->rollback();
    throw $e;
}

この例では、両方のクエリが成功した場合にのみ commit() メソッドが呼び出されます。いずれかのクエリが失敗すると、rollback() メソッドが呼び出され、例外がスローされます。

以上がPHP で MySQL トランザクションを効果的に管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。