teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2019/02/10 05:49

投稿

退会済みユーザー
answer CHANGED
@@ -41,4 +41,52 @@
41
41
  // connect(), update() で発生した例外はここでキャッチできる
42
42
  var_dump($e->getMessage());
43
43
  }
44
+ ```
45
+
46
+ サンプル2
47
+
48
+ ```php
49
+ <?php
50
+
51
+ ini_set('display_error', 1);
52
+ error_reporting(E_ALL);
53
+
54
+ /**
55
+ * DB 接続
56
+ */
57
+ function connect()
58
+ {
59
+ try {
60
+ $dsn = 'mysql:host=localhost;dbname=database;charset=utf8mb4';
61
+ $username = 'root';
62
+ $passwd = 'password';
63
+ $pdo = new PDO($dsn, $username, $passwd);
64
+ $pdo->setAttribute(PDO_ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
65
+ return $pdo;
66
+ } catch (Exception $e) {
67
+ // (1)例外をそのままthrow
68
+ throw $e;
69
+ }
70
+ }
71
+
72
+ /**
73
+ * 更新処理
74
+ * @param type $id
75
+ * @param type $value
76
+ * @return type
77
+ */
78
+ function update($id, $value)
79
+ {
80
+ $pdo = connect();
81
+ $sql = 'update table set column = ? where id = ?';
82
+ $stmt = $pdo->prepare($sql);
83
+ return $stmt->execute([$value, $id]);
84
+ }
85
+
86
+ try {
87
+ update(1, 'test');
88
+ } catch (Exception $e) {
89
+ // (1)の例外も update() の例外もここでキャッチ可能
90
+ var_dump($e->getMessage());
91
+ }
44
92
  ```

1

追記

2019/02/10 05:49

投稿

退会済みユーザー
answer CHANGED
@@ -38,6 +38,7 @@
38
38
  try {
39
39
  update(1, 'test');
40
40
  } catch (Exception $e) {
41
+ // connect(), update() で発生した例外はここでキャッチできる
41
42
  var_dump($e->getMessage());
42
43
  }
43
44
  ```