トランザクションをコミットする

# PDO::commit

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

PDO::commit — トランザクションをコミットする

### 説明

public PDO::commit ( void ) : bool

トランザクションをコミットし、 次に PDO::beginTransaction() で新たなトランザクションが開始されるまで、 データベース接続をオートコミットモードに戻します。

### 返り値

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

### エラー / 例外

有効なトランザクションがない場合に PDOException をスローします。

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

### 例

例1 基本的なトランザクションをコミットする

`<?php
/* トランザクションを開始する。オートコミットがオフになる */
$dbh->beginTransaction();
/* 複数レコードを追加する。全部成功か全部失敗のどちらかになる */
$sql = 'INSERT INTO fruit
(name, colour, calories)
VALUES (?, ?, ?)';
$sth = $dbh->prepare($sql);
foreach ($fruits as $fruit) {
$sth->execute(array(
$fruit->name,
$fruit->colour,
$fruit->calories,
));
}
/* 変更をコミットする */
$dbh->commit();
/* データベース接続はオートコミットモードに戻る */
?>`

例2 DDL トランザクションをコミットする

`<?php
/* トランザクションを開始する。オートコミットがオフになる */
$dbh->beginTransaction();
/* データベーススキーマを変更する */
$sth = $dbh->exec("DROP TABLE fruit");
/* 変更をコミットする */
$dbh->commit();
/* データベース接続はオートコミットモードに戻る */
?>`

> 注意: DDL 文の操作にトランザクションが使えないデータベースもあります。 単にエラーになるだけのものもあれば、(MySQL などのように) DDL 文が実行された時点で自動的にトランザクションをコミットしてしまうものもあります。

### 参考

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