トランザクション処理が失敗しても通ってしまいます。
1つ目は成功、2つ目は失敗にしていますが、2が失敗しても1はそのまま実行されてしまいます。
参考サイト
環境:MYSQL
2つ目のインサート文は引数があっていません
php
1<?php 2// DB情報 3$dbh = null; 4$db_admin = "sbiccicms_admin_local_auto"; 5$db_common = "sbiccicms_common_local_auto"; 6$db_front = "sbiccicms_front_local_auto"; 7$user = 'root'; 8$pass = ''; 9 10try { 11 // DB接続 12 $dbh = new PDO('mysql:host=127.0.0.1; dbname='. $db_admin.'; charset=utf8', $user, $pass); 13 14 //例外処理を投げる(スロー)ようにする 15 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 16 17 // トランザクション開始 18 $dbh->beginTransaction(); 19 20 $table_cp = 'create table test_import like site_configs'; 21 $table_create = $dbh->query($table_cp); 22 23 $table_cp = 'create table error like site_configs'; 24 $table_create = $dbh->query($table_cp); 25 26 $insert_site_configs = "INSERT INTO test_import (site_url, site_name, wrt_user_id, created, modified) VALUES ('CCI', 'CCIホーム', 99, cast(now() as datetime),cast(now() as datetime))"; 27 $insert_users_check = $dbh->query($insert_site_configs); 28 29 $insert_site_configs = "INSERT INTO error (site_url, site_name, wrt_user_id, created, modified) VALUES ('CCIホーム', 99, cast(now() as datetime),cast(now() as datetime))"; 30 $insert_users_check = $dbh->query($insert_site_configs); 31 32 // コミット 33 $dbh->commit(); 34 35} catch (PDOException $e) { 36 // ロールバック 37 $dbh->rollBack(); 38 echo 'DB接続エラー:' . $e->getMessage(); 39 die(); 40} catch (Throwable $e) { 41 echo "ロールバック"; 42 // ロールバック 43 $dbh->rollBack(); 44 echo '失敗:' . $e->getMessage(); 45 die(); 46} 47 48 49// DB接続終了 50$dbh = null; 51 52?>
回答2件
あなたの回答
tips
プレビュー