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

回答編集履歴

4

修正

2017/09/13 09:28

投稿

yambejp
yambejp

スコア117912

answer CHANGED
@@ -32,7 +32,7 @@
32
32
  $sql.="and ( 0 ";
33
33
  $sql.="or subject like concat('%',?,'%') ";
34
34
  $data[]=$subject;
35
- $sql.="or concat('%',subject,'%') like ? ";
35
+ $sql.="or ? like concat('%',subject,'%') ";
36
36
  $data[]=$subject;
37
37
  $sql.=") ";
38
38
  }
@@ -40,7 +40,7 @@
40
40
  $sql.="and ( 0 ";
41
41
  $sql.="or teacher like concat('%',?,'%') ";
42
42
  $data[]=$teacher;
43
- $sql.="or concat('%',teacher,'%') like ? ";
43
+ $sql.="or ? like concat('%',teacher,'%') ";
44
44
  $data[]=$teacher;
45
45
  $sql.=") ";
46
46
  }

3

typo

2017/09/13 09:28

投稿

yambejp
yambejp

スコア117912

answer CHANGED
@@ -29,7 +29,7 @@
29
29
  $data[]=$difficulty;
30
30
  }
31
31
  if(!is_null($subject)){
32
- $sql.="and ( 0";
32
+ $sql.="and ( 0 ";
33
33
  $sql.="or subject like concat('%',?,'%') ";
34
34
  $data[]=$subject;
35
35
  $sql.="or concat('%',subject,'%') like ? ";
@@ -37,7 +37,7 @@
37
37
  $sql.=") ";
38
38
  }
39
39
  if(!is_null($teacher)){
40
- $sql.="and ( 0";
40
+ $sql.="and ( 0 ";
41
41
  $sql.="or teacher like concat('%',?,'%') ";
42
42
  $data[]=$teacher;
43
43
  $sql.="or concat('%',teacher,'%') like ? ";

2

修正

2017/09/13 09:15

投稿

yambejp
yambejp

スコア117912

answer CHANGED
@@ -18,4 +18,33 @@
18
18
  $stmt = $pdo->prepare($sql);
19
19
  $stmt->execute($data);
20
20
  ```
21
- ただし前方後方一致はパフォーマンスがでないので注意が必要
21
+ ただし前方後方一致はパフォーマンスがでないので注意が必要
22
+
23
+ # 修正版
24
+ ```PHP
25
+ $sql = "SELECT * FROM table WHERE 1 ";
26
+ $data=[];
27
+ if(!is_null($difficulty)){
28
+ $sql.="and difficulty=? ";
29
+ $data[]=$difficulty;
30
+ }
31
+ if(!is_null($subject)){
32
+ $sql.="and ( 0";
33
+ $sql.="or subject like concat('%',?,'%') ";
34
+ $data[]=$subject;
35
+ $sql.="or concat('%',subject,'%') like ? ";
36
+ $data[]=$subject;
37
+ $sql.=") ";
38
+ }
39
+ if(!is_null($teacher)){
40
+ $sql.="and ( 0";
41
+ $sql.="or teacher like concat('%',?,'%') ";
42
+ $data[]=$teacher;
43
+ $sql.="or concat('%',teacher,'%') like ? ";
44
+ $data[]=$teacher;
45
+ $sql.=") ";
46
+ }
47
+ $stmt = $pdo->prepare($sql);
48
+ $stmt->execute($data);
49
+
50
+ ```

1

修正

2017/09/13 08:57

投稿

yambejp
yambejp

スコア117912

answer CHANGED
@@ -1,18 +1,18 @@
1
1
  流れ的にはこうします
2
-
2
+ ※追記:スペースの抜けだけ修正しました
3
3
  ```PHP
4
- $sql = "SELECT * FROM table WHERE 1 ";
4
+ $sql = "SELECT * FROM table WHERE 1 ";
5
5
  $data=[];
6
6
  if(!is_null($difficulty)){
7
- $sql.="and difficulty=?";
7
+ $sql.="and difficulty=? ";
8
8
  $data[]=$difficulty;
9
9
  }
10
10
  if(!is_null($subject)){
11
- $sql.="and subject like ?";
11
+ $sql.="and subject like ? ";
12
12
  $data[]="%".$subject."%";
13
13
  }
14
14
  if(!is_null($teacher)){
15
- $sql.="and teacher like ?";
15
+ $sql.="and teacher like ? ";
16
16
  $data[]="%".$teacher."%";
17
17
  }
18
18
  $stmt = $pdo->prepare($sql);