トランザクションを開始する

# PDO::beginTransaction

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDO::beginTransaction — トランザクションを開始する

### 説明

public function PDO::beginTransaction(): bool

オートコミットモードをオフにします。オートコミットモードがオフの間、 PDO オブジェクトを通じてデータベースに加えた変更は PDO::commit() をコールするまでコミットされません。 PDO::rollBack() をコールすると、 データベースへの全ての変更をロールバックし、 オートコミットモードに設定された接続を返します。

MySQL を含むいくつかのデータベースでは、DROP TABLE や CREATE TABLE のようなデータベース定義言語 (DDL) ステートメントがトランザクション中に 発行される場合、暗黙的なコミットが自動的に発行されます。 この暗黙的なコミットにより、そのトランザクション境界で 他のあらゆる変更をロールバックすることができなくなるでしょう。

### パラメータ

この関数にはパラメータはありません。

### 戻り値

成功した場合に `true` を、失敗した場合に `false` を返します。

### エラー / 例外

トランザクションが既に開始されている場合や、ドライバがトランザクションに対応していない場合に PDOException をスローします。

> 注意: 例外は、`PDO::ATTR_ERRMODE` 属性が `PDO::ERRMODE_EXCEPTION` ではない場合でも発生します。

### 例

例1 トランザクションをロールバックする

以下の例は、トランザクションを開始し、 変更をロールバックする前にデータベースを修正する 2 つのステートメントを発行します。 しかしながら MySQL では、DROP TABLE ステートメントは 自動的にトランザクションをコミットするので、 トランザクション中のどの変更もロールバックされません。

    <?php
    /* トランザクションを開始する。オートコミットがオフになる */
    $dbh->beginTransaction();

    /* データベーススキーマとデータを変更する */
    $sth = $dbh->exec("DROP TABLE fruit");
    $sth = $dbh->exec("UPDATE dessert
        SET name = 'hamburger'");

    /* ミスに気づき、変更をロールバックする */
    $dbh->rollBack();

    /* データベース接続はオートコミットモードに戻る */
    ?>

### 参考

- PDO::commit() - トランザクションをコミットする
- PDO::rollBack() - トランザクションをロールバックする
- トランザクションおよび自動コミット

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open