質問編集履歴

1

PHPコードを追記

2017/11/11 07:57

投稿

okame
okame

スコア54

test CHANGED
File without changes
test CHANGED
@@ -66,6 +66,368 @@
66
66
 
67
67
 
68
68
 
69
+ ###追記:PHPのソースコード
70
+
71
+
72
+
73
+ まずは以下の登録した管理者の情報を編集する完了画面のコードです。
74
+
75
+ 26行目の``` $managerRepository->execute('UPDATE'); ``` で更新処理を実行します。
76
+
77
+
78
+
79
+ ```php
80
+
81
+ <?php
82
+
83
+
84
+
85
+ require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
86
+
87
+
88
+
89
+ use AppBundle\Entity\ManagerRepository;
90
+
91
+
92
+
93
+ $loader = new Twig_Loader_Filesystem($_SERVER['DOCUMENT_ROOT'] . '/app/resources/views/');
94
+
95
+ $twig = new Twig_Environment($loader);
96
+
97
+
98
+
99
+ // このページに直接アクセスしてきた場合はエラー画面遷移
100
+
101
+ if (count($_POST) == 0) {
102
+
103
+ echo $twig->render('admin/error.html.twig', [
104
+
105
+ 'error' => '操作に誤りがありました。初めからやり直してください。',
106
+
107
+ ]);
108
+
109
+ exit();
110
+
111
+ }
112
+
113
+
114
+
115
+ $managerRepository = new ManagerRepository();
116
+
117
+ $managerRepository->setAllProperties('UPDATE');
118
+
119
+ $managerRepository->execute('UPDATE');
120
+
121
+
122
+
123
+ echo $twig->render('admin/staff/editComplete.html.twig', [
124
+
125
+ 'username' => $managerRepository->getUsername(),
126
+
127
+ ]);
128
+
129
+
130
+
131
+ ?>
132
+
133
+ ```
134
+
135
+
136
+
137
+ 上記26行目のメソッドのコードは以下です。
138
+
139
+ 下の方のコード```$dbObject->run('UPDATE', $sql, $values); ``` に続きます。
140
+
141
+ $sqlに格納しているクエリは直接DBツール上で実行しましたが、正常に実行できます。
142
+
143
+
144
+
145
+ ```php
146
+
147
+ <?php
148
+
149
+
150
+
151
+ namespace AppBundle\Entity;
152
+
153
+
154
+
155
+ use AppBundle\Common\DatabaseAccessObject;
156
+
157
+
158
+
159
+
160
+
161
+ class ManagerRepository extends Manager
162
+
163
+ {
164
+
165
+ ...
166
+
167
+ public function execute($type)
168
+
169
+ {
170
+
171
+ $dbObject = new DatabaseAccessObject();
172
+
173
+
174
+
175
+ $sql = '';
176
+
177
+ $values = [];
178
+
179
+
180
+
181
+ switch ($type) {
182
+
183
+ ...
184
+
185
+ case 'UPDATE':
186
+
187
+ $sql = 'UPDATE manager SET
188
+
189
+ user_name = ?,
190
+
191
+ password = ?,
192
+
193
+ password_updated_at = ?,
194
+
195
+ last_name = ?,
196
+
197
+ first_name = ?,
198
+
199
+ remarks = ?,
200
+
201
+ updated_at = ?,
202
+
203
+ updated_manager_id = 0 WHERE id = ?';
204
+
205
+
206
+
207
+ $values = [
208
+
209
+ $this->getUsername(),
210
+
211
+ $this->getPassword(),
212
+
213
+ $this->getPasswordUpdatedAt(),
214
+
215
+ $this->getLastName(),
216
+
217
+ $this->getFirstName(),
218
+
219
+ $this->getRemarks(),
220
+
221
+ $this->getUpdatedAt(),
222
+
223
+ $this->getId(),
224
+
225
+ ];
226
+
227
+
228
+
229
+ $dbObject->run('UPDATE', $sql, $values);
230
+
231
+ break;
232
+
233
+ ...
234
+
235
+ }
236
+
237
+ }
238
+
239
+ ```
240
+
241
+
242
+
243
+ 上記```$dbObject->run('UPDATE', $sql, $values); ``` のコードは以下です。
244
+
245
+
246
+
247
+ ```php
248
+
249
+ <?php
250
+
251
+
252
+
253
+ namespace AppBundle\Common;
254
+
255
+
256
+
257
+ use AppBundle\Common\Config;
258
+
259
+
260
+
261
+ /**
262
+
263
+ * データベースへの接続情報をセット
264
+
265
+ */
266
+
267
+ Config::set('dsn', 'mysql:host=localhost;dbname=***;charset=utf8');
268
+
269
+ Config::set('user', '***');
270
+
271
+ Config::set('password', 'ad***');
272
+
273
+
274
+
275
+ /**
276
+
277
+ * Class DatabaseAccessObject データベースへの接続、リクエストを管理
278
+
279
+ */
280
+
281
+ class DatabaseAccessObject
282
+
283
+ {
284
+
285
+ /**
286
+
287
+ * @var \PDO $dbh データベースハンドラ
288
+
289
+ */
290
+
291
+ private $dbh;
292
+
293
+
294
+
295
+ /**
296
+
297
+ * データベースへ接続する
298
+
299
+ *
300
+
301
+ * @throws \PDOException
302
+
303
+ */
304
+
305
+ public function __construct()
306
+
307
+ {
308
+
309
+ // データベース情報
310
+
311
+ $dsn = Config::get('dsn');
312
+
313
+ $user = Config::get('user');
314
+
315
+ $password = Config::get('password');
316
+
317
+
318
+
319
+ // DB接続とエラー発生時のエラーモード設定
320
+
321
+ $this->dbh = new \PDO($dsn, $user, $password);
322
+
323
+ $this->dbh->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
324
+
325
+ }
326
+
327
+
328
+
329
+ /**
330
+
331
+ * セットしたクエリを実行する
332
+
333
+ *
334
+
335
+ * @paramsh array $params
336
+
337
+ * @return array $stmt
338
+
339
+ * @throws \PDOException
340
+
341
+ */
342
+
343
+ public function run($type, $query, $params = [])
344
+
345
+ {
346
+
347
+ $this->dbh->beginTransaction();
348
+
349
+
350
+
351
+ try {
352
+
353
+ $stmt = $this->dbh->prepare($query);
354
+
355
+
356
+
357
+ if (count($params)) {
358
+
359
+ $stmt->execute($params);
360
+
361
+
362
+
363
+ } else {
364
+
365
+ $stmt->execute();
366
+
367
+ }
368
+
369
+
370
+
371
+
372
+
373
+ } catch (\Exception $e) {
374
+
375
+ // トランザクションが失敗した際のロールバック処理
376
+
377
+ $this->dbh->rollBack();
378
+
379
+ throw $e;
380
+
381
+ }
382
+
383
+
384
+
385
+ $this->dbh->commit();
386
+
387
+
388
+
389
+ if ($type == 'SELECT') {
390
+
391
+ return $stmt->fetchAll();
392
+
393
+
394
+
395
+ } elseif ($type == 'SELECT_BY_ONE') {
396
+
397
+ return $stmt->fetch();
398
+
399
+ }
400
+
401
+ }
402
+
403
+
404
+
405
+ /**
406
+
407
+ * 接続を閉じる
408
+
409
+ */
410
+
411
+ public function __destruct()
412
+
413
+ {
414
+
415
+ $this->dbh = null;
416
+
417
+ }
418
+
419
+ }
420
+
421
+ ```
422
+
423
+
424
+
425
+ 最終的にPDOStatement::execute()メソッドでクエリを投げているわけですが、
426
+
427
+ これの返り値は「true」となり、エラーは発生していません。
428
+
429
+
430
+
69
431
  ###以上です
70
432
 
71
433