回答編集履歴

2

500について

2016/03/09 13:12

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -114,7 +114,7 @@
114
114
 
115
115
  // PDOがエラーを検知したときはここに飛んで来る
116
116
 
117
- http_response_code(500);
117
+ http_response_code(500); // 「500 Internal Server Error」
118
118
 
119
119
  $error = $e->getMessage();
120
120
 

1

コメントの追加

2016/03/09 13:12

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -20,6 +20,10 @@
20
20
 
21
21
 
22
22
 
23
+ // デフォルトでは「text/html」なので「application/json」であるとして明示する
24
+
25
+ // 文字コードにはUTF-8を指定する
26
+
23
27
  header('Content-Type: application/json; charset=UTF-8');
24
28
 
25
29
 
@@ -28,11 +32,17 @@
28
32
 
29
33
 
30
34
 
35
+ // $_POST['id'], $_POST['message'], $_POST['password'] を文字列として確実に受け取る
36
+
37
+ // 「$$var」は可変変数で,順番に $id, $message, $password となる
38
+
31
39
  foreach (['id', 'message', 'password'] as $var) {
32
40
 
33
41
  $$var = (string)filter_input(INPUT_POST, $var);
34
42
 
35
43
  if ($$var === '') {
44
+
45
+ // どれか1つでも空だったら「400 Bad Request」として処理を中断する
36
46
 
37
47
  throw new RuntimeException("Missing parameter: $var", 400);
38
48
 
@@ -40,11 +50,21 @@
40
50
 
41
51
  }
42
52
 
53
+
54
+
55
+ // PHP5.5以降使える最も安全なパスワードハッシュ生成関数を使用する
56
+
43
57
  $password = password_hash($password, PASSWORD_DEFAULT);
58
+
59
+
60
+
61
+ // 東京の現在時刻の文字列を生成
44
62
 
45
63
  $created_at = (new DateTime('now Asia/Tokyo'))->foramt('Y-m-d H:i:s');
46
64
 
47
65
 
66
+
67
+ // mydbデータベースに接続 (失敗するとPDOExceptionがスローされて処理が中断される)
48
68
 
49
69
  $pdo = new PDO(
50
70
 
@@ -56,7 +76,17 @@
56
76
 
57
77
  );
58
78
 
79
+
80
+
81
+ // SQL実行時のエラーでもPDOExceptionがスローされて処理が中断されるようにする
82
+
59
83
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
84
+
85
+
86
+
87
+ // INSERT文のプリペアドステートメントを生成し,
88
+
89
+ // 「?」のプレースホルダ部分に順番に変数を当てはめて実行する
60
90
 
61
91
  $stmt = $pdo->prepare("
62
92
 
@@ -68,6 +98,10 @@
68
98
 
69
99
  $stmt->execute([$id, $message, $password, $created_at]);
70
100
 
101
+
102
+
103
+ // 結果をJSONで表示
104
+
71
105
  $message = 'success';
72
106
 
73
107
  echo json_encode(compact('message'), JSON_UNESCAPED_UNICODE);
@@ -77,6 +111,8 @@
77
111
  } catch (PDOException $e) {
78
112
 
79
113
 
114
+
115
+ // PDOがエラーを検知したときはここに飛んで来る
80
116
 
81
117
  http_response_code(500);
82
118
 
@@ -90,6 +126,8 @@
90
126
 
91
127
 
92
128
 
129
+ // 手動で中断したときはここに飛んで来る
130
+
93
131
  http_response_code($e->getCode());
94
132
 
95
133
  $error = $e->getMessage();