回答編集履歴

4

見直し

2019/05/01 11:34

投稿

退会済みユーザー
test CHANGED
@@ -60,11 +60,15 @@
60
60
 
61
61
  ふつうに見えるように文字列を加工してしまうものです。
62
62
 
63
+ 例えば「&」を出力できるように「&」と
64
+
63
- 例えば&」を出力できるように「&」と書き換えてしまいます。
65
+ "」を出力できるように「"」と書き換えてしまいます。
64
66
 
65
67
  もしも$staff_name文字列に&を許容したとして、
66
68
 
67
- データベースに&を含む人だぁれってクエリー組むときに面倒になります。
69
+ データベースに&を含む人だぁれってクエリー組むときに
70
+
71
+ &にも"にも反応すると面倒になります。
68
72
 
69
73
  データベースには加工前の正しいデータを保存することを守りましょう。
70
74
 

3

加筆修正

2019/05/01 11:34

投稿

退会済みユーザー
test CHANGED
@@ -73,3 +73,21 @@
73
73
  変数で加工後の文字列を保持しないほうが良いです。
74
74
 
75
75
  参考:[PHP で h() を書くなら一緒に echo しよう。 - こせきの技術日記](http://koseki.hatenablog.com/entry/20120216/htmlspecialhonyarara)
76
+
77
+
78
+
79
+ 老婆心でもう一つ。
80
+
81
+ データベースアクセスの一連の流れは、
82
+
83
+ [PHPでデータベースに接続するときのまとめ - Qiita](https://qiita.com/mpyw/items/b00b72c5c95aac573b71)
84
+
85
+ ここにエッセンスが詰め込まれているので真似すると良いよ。
86
+
87
+
88
+
89
+ ・スマホ相手に絵文字を扱うかもしれないときは、utf8mb4を使う。
90
+
91
+ ・new PDO()するときに、もうdriver_optionsを与えてエラー発生時に例外を発生させるようにしつつ、一連のDB処理をtry~catchで括る。
92
+
93
+ ・PDO::prepare → PDOStatement::bindValue → PDOStatement::execute の3ステップでクエリを実行する。bindValue()使えば、データ型の指定ができるし。

2

見直し

2019/05/01 10:53

投稿

退会済みユーザー
test CHANGED
@@ -13,6 +13,10 @@
13
13
  `$sql = "INSERT INTO mst_staff (name, password) VALUES ( :$staff_name, :$staff_pass)";`
14
14
 
15
15
  全角空白入れてると動かないよ。
16
+
17
+ `$sql = "INSERT INTO mst_staff (name, password) VALUES ( :staff_name, :staff_pass)";`
18
+
19
+ プレースホルダに`$`はつけない。
16
20
 
17
21
 
18
22
 

1

見直し

2019/05/01 10:46

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,10 @@
1
1
  26行目付近に、未定義の変数 data を参照しているよ、というエラーメッセージです。
2
+
3
+ `$stmt->execute($data); `
4
+
5
+ これですね。
6
+
7
+ せめて、`$stmt->execute([$staff_name, $staff_pass]); `とします。
2
8
 
3
9
  「Notice: Undefined variable」の箇所だけでもネット検索すれば解説ページが見つかるはずですが。
4
10