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

回答編集履歴

3

見直し

2019/01/16 00:38

投稿

退会済みユーザー
answer CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  where句を構成するのに多少冗長になっても、
6
6
  (そのままSQL文に織り込まない)数字や文字列など単純なデータにするべきです。
7
+ そして、受信した`$_POST`や`$_GET`に望まない不正なデータが含まれていないか検証する必要もあります。
8
+ (その検証をラクにする一つの手段として、`filter_input()`などがあります。)
7
9
 
8
10
  URLに織り込むパラメータについては、
9
11
  まず`?`より後ろの文字列を、`&`を区切り文字として分解し、
@@ -13,7 +15,9 @@
13
15
  `&`や`=`や`?`などurlに直接書いちゃいけない文字を置き換えてくれます。
14
16
 
15
17
  それと、`$_POST['~']`とか`$_REQUEST['~']`とか
16
- 参照するデータが存在しない場合はちょっとしたエラーメッセージがログに残るので、
18
+ 参照するデータが存在しない場合はちょっとしたエラーメッセージが
19
+ Notice: Undefined index: なんとか in 行番号
20
+ などとログに残るので、
17
21
  `filter_input()`や`filter_input_array()`にしなさいって言われるぞ。
18
22
 
19
23
  さらに、

2

加筆修正

2019/01/16 00:38

投稿

退会済みユーザー
answer CHANGED
@@ -14,4 +14,9 @@
14
14
 
15
15
  それと、`$_POST['~']`とか`$_REQUEST['~']`とか
16
16
  参照するデータが存在しない場合はちょっとしたエラーメッセージがログに残るので、
17
- `filter_input()`や`filter_input_array()`にしなさいって言われるぞ。
17
+ `filter_input()`や`filter_input_array()`にしなさいって言われるぞ。
18
+
19
+ さらに、
20
+ いちいち`if (strlen($where) > 0) {`をつけると無駄にソースコードが長くなるので、
21
+ 私は配列に`$where_terms[] = 'a = 1';`みたいなのを積み上げておいて、
22
+ 最後に`$where = 'WHERE ' . implode(' AND ', $where_terms);`みたいなことをするよ。

1

加筆修正

2019/01/15 12:23

投稿

退会済みユーザー
answer CHANGED
@@ -10,4 +10,8 @@
10
10
  区切ったあとの文字列ごとに最初に出現する`=`でパラメータ名とデータを分離しているはず。
11
11
  where句に使っている、「なんとかイコールなんとかの」のイコールも分離用に使われてしまうので、
12
12
  せめて`urlencode()`でエンコードしますよ普通は。
13
- `&`や`=`や`?`などurlに直接書いちゃいけない文字を置き換えてくれます。
13
+ `&`や`=`や`?`などurlに直接書いちゃいけない文字を置き換えてくれます。
14
+
15
+ それと、`$_POST['~']`とか`$_REQUEST['~']`とか
16
+ 参照するデータが存在しない場合はちょっとしたエラーメッセージがログに残るので、
17
+ `filter_input()`や`filter_input_array()`にしなさいって言われるぞ。