Keep in mind this bug: https://bugs.php.net/bug.php?id=66528
you could not rely on commit() return value while using MySql
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDO::commit — トランザクションをコミットする
トランザクションをコミットし、 次に 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 文が実行された時点で自動的にトランザクションをコミットしてしまうものもあります。
Keep in mind this bug: https://bugs.php.net/bug.php?id=66528
you could not rely on commit() return value while using MySql