質問編集履歴

2

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

2016/03/29 07:39

投稿

piyoon
piyoon

スコア68

test CHANGED
File without changes
test CHANGED
@@ -6,11 +6,9 @@
6
6
 
7
7
 
8
8
 
9
- //%が抜けていました。
9
+ $a_ = 'a';
10
10
 
11
- $a_ = '%a%';
12
-
13
- $b_ = '%b%';
11
+ $b_ = 'b';
14
12
 
15
13
 
16
14
 

1

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

2016/03/29 07:39

投稿

piyoon
piyoon

スコア68

test CHANGED
File without changes
test CHANGED
@@ -6,9 +6,19 @@
6
6
 
7
7
 
8
8
 
9
- $a = 'a';
9
+ //%が抜けていました。
10
10
 
11
+ $a_ = '%a%';
12
+
11
- $b = 'b';
13
+ $b_ = '%b%';
14
+
15
+
16
+
17
+ //記入漏れ
18
+
19
+ $a = "%" . mb_ereg_replace('([_%#])', '#\1', $a_) . "%";
20
+
21
+ $b = "%" . mb_ereg_replace('([_%#])', '#\1', $b_) . "%";
12
22
 
13
23
 
14
24
 
@@ -22,7 +32,7 @@
22
32
 
23
33
  //値aのlike
24
34
 
25
- $sql = "select * from table where enable=1 and a like :a";
35
+ $sql = 'select * from table where enable=1 and a like :a ESCAPE "#"';
26
36
 
27
37
  $stmt = $dbh->prepare($sql);
28
38
 
@@ -34,7 +44,7 @@
34
44
 
35
45
  //値bのlike
36
46
 
37
- $sql = "select * from table where enable=1 and b like :b";
47
+ $sql = 'select * from table where enable=1 and b like :b ESCAPE "#"';
38
48
 
39
49
  $stmt = $dbh->prepare($sql);
40
50
 
@@ -46,7 +56,7 @@
46
56
 
47
57
  //値aの一致または値bの一致
48
58
 
49
- $sql = "select * from table where is_user=1 and (a=:a or b=:b)";
59
+ $sql = 'select * from table where is_user=1 and (a=:a or b=:b);
50
60
 
51
61
  $stmt = $dbh->prepare($sql);
52
62
 
@@ -60,11 +70,17 @@
60
70
 
61
71
  以下のSQLがexecuteでコケてしまいます。
62
72
 
73
+ (MySql.logに記録はなく、エラーも見当たりませんでした)
74
+
63
75
 
64
76
 
65
77
  //値aのlikeまたは値bのlike
66
78
 
67
- $sql = "select * from table where enable=1 and (a like :a or b like :b)";
79
+ 誤)$sql = 'select * from table where enable=1 and (a like :a or b like :b)';
80
+
81
+
82
+
83
+ 正)$sql = 'select * from table where enable=1 and (a like :a or b like :b) ESCAPE "#"'
68
84
 
69
85
  $stmt = $dbh->prepare($sql);
70
86