回答編集履歴

1

コードミス修正

2017/09/13 11:35

投稿

Tomak
Tomak

スコア1652

test CHANGED
@@ -8,37 +8,25 @@
8
8
 
9
9
 
10
10
 
11
- ※subjectが空の場合は「'数学者' LIKE '%%'」となってしまうので「空」を除外します
12
-
13
-
14
-
15
11
  ```sql
16
12
 
17
13
  SELECT * FROM table
18
14
 
19
15
  WHERE (
20
16
 
21
- difficulty = '易' AND
17
+ difficulty = :difficulty AND
22
18
 
23
- subject LIKE '%:subject%' AND
19
+ subject LIKE CONCAT('%',:subject,'%') AND
24
20
 
25
- teacher LIKE '%:teacher%'
21
+ teacher LIKE CONCAT('%',:teacher,'%')
26
22
 
27
23
  ) OR (
28
24
 
29
- difficulty = '易' AND
25
+ difficulty = :difficulty AND
30
26
 
31
- ':subject' LIKE CONCAT('%',subject,'%') AND
27
+ :subject LIKE CONCAT('%',subject,'%') AND
32
28
 
33
- ':teacher' LIKE CONCAT('%',teacher,'%') AND
29
+ :teacher LIKE CONCAT('%',teacher,'%')
34
-
35
- subject <> '' AND
36
-
37
- teacher <> '' AND
38
-
39
- subject IS NOT NULL AND
40
-
41
- teacher IS NOT NULL
42
30
 
43
31
  )
44
32
 
@@ -46,18 +34,22 @@
46
34
 
47
35
 
48
36
 
49
- PHPのプレースホルダのバインドは、下記のようにします。
37
+ PHPのプレースホルダのバインドは、下記のようにします。テキストボックスが空の時は、条件分岐でSQL文とプレースホルダのバインドを分けて書きます。
50
38
 
51
39
 
52
40
 
53
41
  ```php
54
42
 
55
- $stm->bindValue(':subject', $subject, PDO::PARAM_STR);
43
+ $stm->bindValue(':difficulty', $difficulty, PDO::PARAM_STR);
56
44
 
45
+ $stm->bindValue(':subject', $subject, PDO::PARAM_STR);
46
+
57
- $stm->bindValue(':teacher', $teacher, PDO::PARAM_STR);
47
+ $stm->bindValue(':teacher', $teacher, PDO::PARAM_STR);
58
48
 
59
49
  ```
60
50
 
61
51
 
62
52
 
63
53
  きちんとやるには、日本語の形態要素解析か単語辞書検索のようなロジックが必要になります。
54
+
55
+