回答編集履歴
2
500について
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
コメントの追加
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();
|