質問編集履歴
5
追記を加筆しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -70,7 +70,7 @@
|
|
70
70
|
|
71
71
|
こういう場合、どのように対処したらよろしいでしょうか?
|
72
72
|
|
73
|
-
入れ子の処理の方を`insert()` とは別の `insert2()` と分離しておき、その引数に「トランザクションを開くか否か」として`insert2($withTransaction)` のように対処することになるでしょうか?
|
73
|
+
入れ子の処理の方を`insert()` とは別の `insert2()` と分離しておき、その引数に「トランザクションを開くか否か」として`insert2($withTransaction)` のように対処することになるでしょうか? ( `insert2()` を入れ子として実行するときは `$withTransaction` を `false` にし、単一で実行するときは `true` にするという意味です。 )
|
74
74
|
|
75
75
|
これでいいのかと、経験が浅く不安が拭えません。
|
76
76
|
|
4
追記しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -63,3 +63,16 @@
|
|
63
63
|
PHP は 8.2 です。
|
64
64
|
MySQL はやや古めで 5.7 です。
|
65
65
|
よろしくお願い致します。
|
66
|
+
|
67
|
+
### 追記
|
68
|
+
改めて 5.7 のマニュアルを読んでみましたら 「> Transactions cannot be nested. 」との記載がございました…。
|
69
|
+
https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html
|
70
|
+
|
71
|
+
こういう場合、どのように対処したらよろしいでしょうか?
|
72
|
+
|
73
|
+
入れ子の処理の方を`insert()` とは別の `insert2()` と分離しておき、その引数に「トランザクションを開くか否か」として`insert2($withTransaction)` のように対処することになるでしょうか?
|
74
|
+
|
75
|
+
これでいいのかと、経験が浅く不安が拭えません。
|
76
|
+
|
77
|
+
もし妙案ございましたらよろしくお願い致します。
|
78
|
+
|
3
誤字を訂正しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -53,7 +53,7 @@
|
|
53
53
|
}
|
54
54
|
```
|
55
55
|
|
56
|
-
再現可能なコード全体をこちらのリンクに置いておきました。よろしければお試し頂けますと幸いです。( 2
|
56
|
+
再現可能なコード全体をこちらのリンクに置いておきました。よろしければお試し頂けますと幸いです。( 21~23 行目のデータベース接続情報だけ変更してください。)
|
57
57
|
https://3v4l.org/HivEd
|
58
58
|
|
59
59
|
### 試したこと
|
2
リンクを訂正しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
```
|
55
55
|
|
56
56
|
再現可能なコード全体をこちらのリンクに置いておきました。よろしければお試し頂けますと幸いです。( 27~29 行目のデータベース接続情報だけ変更してください。)
|
57
|
-
https://3v4l.org/
|
57
|
+
https://3v4l.org/HivEd
|
58
58
|
|
59
59
|
### 試したこと
|
60
60
|
トランザクションを管理しているデータベース接続が同じだからかな?と思い上記の`$this->pdo`をやめて、`__construct()` で `$this->pdo1` と `$this->pdo2` を開き、外側を`$this->pdo1`に、入れ子を`$this->pdo2`に、と分けてみましたが変化は見らせませんでした。
|
1
コード内のコメントを訂正しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
|
30
30
|
// test_table2 の INSERT を実行
|
31
31
|
$stmt2 = $this->pdo->prepare("INSERT INTO test_table2 (column2) VALUES (:value2)");
|
32
|
-
$value2 = 'some_value_2';
|
32
|
+
$value2 = 'some_value_2';
|
33
33
|
$stmt2->bindParam(':value2', $value2);
|
34
34
|
$stmt2->execute();
|
35
35
|
|
@@ -47,7 +47,7 @@
|
|
47
47
|
return "成功";
|
48
48
|
} catch (\Exception $e) {
|
49
49
|
// 外側のトランザクションのロールバック
|
50
|
-
$this->pdo->rollBack();
|
50
|
+
$this->pdo->rollBack(); // この行でエラーが発生
|
51
51
|
return "エラー: " . $e->getMessage();
|
52
52
|
}
|
53
53
|
}
|