回答編集履歴

1

resultへのinsert時の値バインドを明示化しました。

2017/07/23 07:33

投稿

Iya712
Iya712

スコア158

test CHANGED
@@ -83,3 +83,207 @@
83
83
  }
84
84
 
85
85
  ```
86
+
87
+
88
+
89
+ ## コメント頂いた部分について
90
+
91
+ なるほど、仕様はわかりました。
92
+
93
+ そうなると、resultsテーブルへ格納するレコードは、while(true)の各ループで1件だけですよね。
94
+
95
+ そうであれば、foreachはいらないです。
96
+
97
+
98
+
99
+ 根本的にこれという原因はソースコードから見つけられませんでしたが、resultsにデータが入っていないということと、resultsテーブルへの格納SQLが実行されているのであれば、必ずエラーが出ています。
100
+
101
+ apacheのerror_logに吐き出されるはずなので、そちらを確認してください。
102
+
103
+
104
+
105
+ とりあえず、resultへのinsert処理で値のバインド処理が省略されていた形でしたので、明示的にバインドするソースに書き換えてみました。
106
+
107
+ こちらでどうなるか、試してみていただけないでしょうか?
108
+
109
+
110
+
111
+ ```php
112
+
113
+ <html>
114
+
115
+ <head>
116
+
117
+ <meta charaset="UTF8">
118
+
119
+ <title>素材比較</title>
120
+
121
+ </head>
122
+
123
+ <body>
124
+
125
+
126
+
127
+ <?php
128
+
129
+
130
+
131
+ $question1=$_POST['q1'];
132
+
133
+ $question2=$_POST['q2'];
134
+
135
+ $question3=$_POST['q3'];
136
+
137
+
138
+
139
+ $dsn='mysql:dbname=compare;host=localhost';
140
+
141
+ $user='root';
142
+
143
+ $password='';
144
+
145
+ $dbh=new PDO($dsn, $user, $password);
146
+
147
+ $dbh->query('SET NAMES utf8');
148
+
149
+
150
+
151
+ $sql='SELECT code,r1,r2,r3 FROM answers WHERE 1';
152
+
153
+ $stmt=$dbh->prepare($sql);
154
+
155
+ $stmt->execute();
156
+
157
+
158
+
159
+ $dbh=null;
160
+
161
+
162
+
163
+ //回答が共通する計を求める。
164
+
165
+
166
+
167
+ while(true)
168
+
169
+ {
170
+
171
+ $rec=$stmt->fetch(PDO::FETCH_ASSOC);
172
+
173
+ if($rec==false)
174
+
175
+ {
176
+
177
+ break;
178
+
179
+ }
180
+
181
+
182
+
183
+ if($rec['r1']==$question1)
184
+
185
+ {
186
+
187
+ $s=$s+1;
188
+
189
+ }
190
+
191
+ else
192
+
193
+ {
194
+
195
+ $s=0;
196
+
197
+ }
198
+
199
+ if($rec['r2']==$question2)
200
+
201
+ {
202
+
203
+ $s=$s+1;
204
+
205
+ }
206
+
207
+ if($rec['r3']==$question3)
208
+
209
+ {
210
+
211
+ $s=$s+1;
212
+
213
+ }
214
+
215
+ //試した一例
216
+
217
+ $sql = "INSERT INTO results (id, commons) VALUES (:id, :commons)";
218
+
219
+ $stmt = $dbh->prepare($sql);
220
+
221
+ $stmt->bindParam(':id', $rec['code'], PDO::PARAM_INT);
222
+
223
+ $stmt->bindParam(':commons', $s, PDO::PARAM_INT);
224
+
225
+ $stmt->execute();
226
+
227
+ //ここまで一例
228
+
229
+
230
+
231
+ //上記の一例の部分を書かずにこの下のprintによって表示される値の様にをデータベースのテーブルresultsのフィールドidとフィールドcommonsに格納したい。
232
+
233
+
234
+
235
+ print" |";
236
+
237
+ print $rec['code'];
238
+
239
+ print" | ";
240
+
241
+ print $s;
242
+
243
+ print" |";
244
+
245
+ print '<br/>';
246
+
247
+
248
+
249
+ //これより上。
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+ $s=0;
258
+
259
+ }
260
+
261
+
262
+
263
+ //新規の素材の回答をテーブルanswersの最後に格納。
264
+
265
+ $sql='INSERT INTO answers(r1,r2,r3) VALUES (?,?,?)';
266
+
267
+ $stmt=$dbh->prepare($sql);
268
+
269
+ $data[]=$question1;
270
+
271
+ $data[]=$question2;
272
+
273
+ $data[]=$question3;
274
+
275
+ $stmt->execute($data);
276
+
277
+ $dch=null;
278
+
279
+ ?>
280
+
281
+
282
+
283
+ </body>
284
+
285
+ </html>
286
+
287
+
288
+
289
+ ```