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

質問編集履歴

2

一時変数に%を入れてしまっていました

2016/03/29 07:39

投稿

piyoon
piyoon

スコア75

title CHANGED
File without changes
body CHANGED
@@ -2,9 +2,8 @@
2
2
 
3
3
  where句で式で優先順位を指定したいため括弧を使って指定したのですがexecuteが通りませんでした。
4
4
 
5
- //%が抜けていました。
6
- $a_ = '%a%';
5
+ $a_ = 'a';
7
- $b_ = '%b%';
6
+ $b_ = 'b';
8
7
 
9
8
  //記入漏れ
10
9
  $a = "%" . mb_ereg_replace('([_%#])', '#\1', $a_) . "%";

1

質問のソースに不備がありました。likeのパラメータに%が抜けていた。SQLにESCAPE句を使っていた。以上の点を修正しました。

2016/03/29 07:39

投稿

piyoon
piyoon

スコア75

title CHANGED
File without changes
body CHANGED
@@ -2,36 +2,44 @@
2
2
 
3
3
  where句で式で優先順位を指定したいため括弧を使って指定したのですがexecuteが通りませんでした。
4
4
 
5
+ //%が抜けていました。
5
- $a = 'a';
6
+ $a_ = '%a%';
6
- $b = 'b';
7
+ $b_ = '%b%';
7
8
 
9
+ //記入漏れ
10
+ $a = "%" . mb_ereg_replace('([_%#])', '#\1', $a_) . "%";
11
+ $b = "%" . mb_ereg_replace('([_%#])', '#\1', $b_) . "%";
12
+
8
13
  $dbh = connectDB(); //DBコネクション関数
9
14
 
10
15
  //全てにおいてenable=1をand条件としています。
11
16
 
12
17
  //値aのlike
13
- $sql = "select * from table where enable=1 and a like :a";
18
+ $sql = 'select * from table where enable=1 and a like :a ESCAPE "#"';
14
19
  $stmt = $dbh->prepare($sql);
15
20
  $stmt->bindParam(':a', $a, PDO::PARAM_STR);
16
21
  $stmt->execute();
17
22
 
18
23
  //値bのlike
19
- $sql = "select * from table where enable=1 and b like :b";
24
+ $sql = 'select * from table where enable=1 and b like :b ESCAPE "#"';
20
25
  $stmt = $dbh->prepare($sql);
21
26
  $stmt->bindParam(':b', $b, PDO::PARAM_STR);
22
27
  $stmt->execute();
23
28
 
24
29
  //値aの一致または値bの一致
25
- $sql = "select * from table where is_user=1 and (a=:a or b=:b)";
30
+ $sql = 'select * from table where is_user=1 and (a=:a or b=:b);
26
31
  $stmt = $dbh->prepare($sql);
27
32
  $stmt->bindParam(':b', $b, PDO::PARAM_STR);
28
33
  $stmt->execute();
29
34
 
30
35
  上記3つのSQLは正常に動くのですが
31
36
  以下のSQLがexecuteでコケてしまいます。
37
+ (MySql.logに記録はなく、エラーも見当たりませんでした)
32
38
 
33
39
  //値aのlikeまたは値bのlike
34
- $sql = "select * from table where enable=1 and (a like :a or b like :b)";
40
+ 誤)$sql = 'select * from table where enable=1 and (a like :a or b like :b)';
41
+
42
+ 正)$sql = 'select * from table where enable=1 and (a like :a or b like :b) ESCAPE "#"'
35
43
  $stmt = $dbh->prepare($sql);
36
44
  $stmt->bindParam(':a', $a, PDO::PARAM_STR);
37
45
  $stmt->bindParam(':b', $b, PDO::PARAM_STR);