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

回答編集履歴

1

コードミス修正

2017/09/13 11:35

投稿

Tomak
Tomak

スコア1652

answer CHANGED
@@ -3,30 +3,25 @@
3
3
  - subject LIKE '%数%' OR
4
4
  - '数学者' LIKE '%数学(subject)%'
5
5
 
6
- ※subjectが空の場合は「'数学者' LIKE '%%'」となってしまうので「空」を除外します
7
-
8
6
  ```sql
9
7
  SELECT * FROM table
10
8
  WHERE (
11
- difficulty = '易' AND
9
+ difficulty = :difficulty AND
12
- subject LIKE '%:subject%' AND
10
+ subject LIKE CONCAT('%',:subject,'%') AND
13
- teacher LIKE '%:teacher%'
11
+ teacher LIKE CONCAT('%',:teacher,'%')
14
12
  ) OR (
15
- difficulty = '易' AND
13
+ difficulty = :difficulty AND
16
- ':subject' LIKE CONCAT('%',subject,'%') AND
14
+ :subject LIKE CONCAT('%',subject,'%') AND
17
- ':teacher' LIKE CONCAT('%',teacher,'%') AND
15
+ :teacher LIKE CONCAT('%',teacher,'%')
18
- subject <> '' AND
19
- teacher <> '' AND
20
- subject IS NOT NULL AND
21
- teacher IS NOT NULL
22
16
  )
23
17
  ```
24
18
 
25
- PHPのプレースホルダのバインドは、下記のようにします。
19
+ PHPのプレースホルダのバインドは、下記のようにします。テキストボックスが空の時は、条件分岐でSQL文とプレースホルダのバインドを分けて書きます。
26
20
 
27
21
  ```php
22
+ $stm->bindValue(':difficulty', $difficulty, PDO::PARAM_STR);
28
- $stm->bindValue(':subject', $subject, PDO::PARAM_STR);
23
+ $stm->bindValue(':subject', $subject, PDO::PARAM_STR);
29
- $stm->bindValue(':teacher', $teacher, PDO::PARAM_STR);
24
+ $stm->bindValue(':teacher', $teacher, PDO::PARAM_STR);
30
25
  ```
31
26
 
32
- きちんとやるには、日本語の形態要素解析か単語辞書検索のようなロジックが必要になります。
27
+ きちんとやるには、日本語の形態要素解析か単語辞書検索のようなロジックが必要になります。