回答編集履歴

4

修正

2017/09/13 09:28

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -66,7 +66,7 @@
66
66
 
67
67
  $data[]=$subject;
68
68
 
69
- $sql.="or concat('%',subject,'%') like ? ";
69
+ $sql.="or ? like concat('%',subject,'%') ";
70
70
 
71
71
  $data[]=$subject;
72
72
 
@@ -82,7 +82,7 @@
82
82
 
83
83
  $data[]=$teacher;
84
84
 
85
- $sql.="or concat('%',teacher,'%') like ? ";
85
+ $sql.="or ? like concat('%',teacher,'%') ";
86
86
 
87
87
  $data[]=$teacher;
88
88
 

3

typo

2017/09/13 09:28

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
  if(!is_null($subject)){
62
62
 
63
- $sql.="and ( 0";
63
+ $sql.="and ( 0 ";
64
64
 
65
65
  $sql.="or subject like concat('%',?,'%') ";
66
66
 
@@ -76,7 +76,7 @@
76
76
 
77
77
  if(!is_null($teacher)){
78
78
 
79
- $sql.="and ( 0";
79
+ $sql.="and ( 0 ";
80
80
 
81
81
  $sql.="or teacher like concat('%',?,'%') ";
82
82
 

2

修正

2017/09/13 09:15

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -39,3 +39,61 @@
39
39
  ```
40
40
 
41
41
  ただし前方後方一致はパフォーマンスがでないので注意が必要
42
+
43
+
44
+
45
+ # 修正版
46
+
47
+ ```PHP
48
+
49
+ $sql = "SELECT * FROM table WHERE 1 ";
50
+
51
+ $data=[];
52
+
53
+ if(!is_null($difficulty)){
54
+
55
+ $sql.="and difficulty=? ";
56
+
57
+ $data[]=$difficulty;
58
+
59
+ }
60
+
61
+ if(!is_null($subject)){
62
+
63
+ $sql.="and ( 0";
64
+
65
+ $sql.="or subject like concat('%',?,'%') ";
66
+
67
+ $data[]=$subject;
68
+
69
+ $sql.="or concat('%',subject,'%') like ? ";
70
+
71
+ $data[]=$subject;
72
+
73
+ $sql.=") ";
74
+
75
+ }
76
+
77
+ if(!is_null($teacher)){
78
+
79
+ $sql.="and ( 0";
80
+
81
+ $sql.="or teacher like concat('%',?,'%') ";
82
+
83
+ $data[]=$teacher;
84
+
85
+ $sql.="or concat('%',teacher,'%') like ? ";
86
+
87
+ $data[]=$teacher;
88
+
89
+ $sql.=") ";
90
+
91
+ }
92
+
93
+ $stmt = $pdo->prepare($sql);
94
+
95
+ $stmt->execute($data);
96
+
97
+
98
+
99
+ ```

1

修正

2017/09/13 08:57

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -1,16 +1,16 @@
1
1
  流れ的にはこうします
2
2
 
3
-
3
+ ※追記:スペースの抜けだけ修正しました
4
4
 
5
5
  ```PHP
6
6
 
7
- $sql = "SELECT * FROM table WHERE 1 ";
7
+ $sql = "SELECT * FROM table WHERE 1 ";
8
8
 
9
9
  $data=[];
10
10
 
11
11
  if(!is_null($difficulty)){
12
12
 
13
- $sql.="and difficulty=?";
13
+ $sql.="and difficulty=? ";
14
14
 
15
15
  $data[]=$difficulty;
16
16
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  if(!is_null($subject)){
20
20
 
21
- $sql.="and subject like ?";
21
+ $sql.="and subject like ? ";
22
22
 
23
23
  $data[]="%".$subject."%";
24
24
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  if(!is_null($teacher)){
28
28
 
29
- $sql.="and teacher like ?";
29
+ $sql.="and teacher like ? ";
30
30
 
31
31
  $data[]="%".$teacher."%";
32
32