質問編集履歴
2
一時変数に%を入れてしまっていました
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_ = '
|
11
|
+
$b_ = 'b';
|
14
12
|
|
15
13
|
|
16
14
|
|
1
質問のソースに不備がありました。likeのパラメータに%が抜けていた。SQLにESCAPE句を使っていた。以上の点を修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,9 +6,19 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
|
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 =
|
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 =
|
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 =
|
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 =
|
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
|
|