回答編集履歴

2

サンプル追加

2019/12/31 12:00

投稿

tanat
tanat

スコア18713

test CHANGED
@@ -132,6 +132,38 @@
132
132
 
133
133
  $conditionPrepare = implode(" AND ",$conditionAndList);
134
134
 
135
+ //echo $conditionPrepare の結果は
136
+
137
+ //`name` = ? AND `name` = ? AND `title` = ? AND `title` = ? こんな感じになる
138
+
139
+
140
+
141
+ //var_dump($bindedValueList);の結果は
142
+
143
+ /* こんな感じ
144
+
145
+ array(4) {
146
+
147
+ [0]=>
148
+
149
+ string(1) "a"
150
+
151
+ [1]=>
152
+
153
+ string(1) "b"
154
+
155
+ [2]=>
156
+
157
+ string(1) "c"
158
+
159
+ [3]=>
160
+
161
+ string(1) "d"
162
+
163
+ }
164
+
165
+ */
166
+
135
167
 
136
168
 
137
169
  //中略

1

サンプル追加

2019/12/31 12:00

投稿

tanat
tanat

スコア18713

test CHANGED
@@ -81,3 +81,77 @@
81
81
  と言う感じで`$condition`を組み立てましょう。
82
82
 
83
83
  その際には`$condition`にユーザーからの入力を直接組み込んでしまわないように注意する必要があります。(フィールド名についてはホワイトリスト形式でチェックするなど)
84
+
85
+
86
+
87
+
88
+
89
+ 例)
90
+
91
+ ---
92
+
93
+
94
+
95
+ ```PHP
96
+
97
+
98
+
99
+ // Your code here!
100
+
101
+ //すべてAndで絞るとして、$conditions["フィールド名"][条件の値]の場合
102
+
103
+ $conditions["name"] = ["a","b"];
104
+
105
+ $conditions["title"] = ["c","d"];
106
+
107
+
108
+
109
+ //となった場合、
110
+
111
+ //`name` = ? AND `name` = ? AND `title` = ? and `title` = ?
112
+
113
+ //という文字列を作りたいので
114
+
115
+ $conditionAndList = [];
116
+
117
+ foreach($conditions as $fieldName => $valueList){
118
+
119
+ foreach($valueList as $value){
120
+
121
+ $conditionAndList[] = '`'.$fieldName.'` = ?';
122
+
123
+ //後でbindValueするとき用の配列
124
+
125
+ $bindedValueList[] = $value;
126
+
127
+ }
128
+
129
+ }
130
+
131
+
132
+
133
+ $conditionPrepare = implode(" AND ",$conditionAndList);
134
+
135
+
136
+
137
+ //中略
138
+
139
+
140
+
141
+ //動的に作成した?の数だけbindValueする
142
+
143
+ foreach($bindedValueList as $key => $bindedValue){
144
+
145
+ $search->bindValue($key+1,$bindedValue);
146
+
147
+ }
148
+
149
+
150
+
151
+ //limitで使う固定的な数の?は普通にbindValueする
152
+
153
+
154
+
155
+ //後略
156
+
157
+ ```