質問編集履歴

1

試したこと、コードを追加

2020/12/08 18:22

投稿

shotail
shotail

スコア2

test CHANGED
File without changes
test CHANGED
@@ -8,14 +8,20 @@
8
8
 
9
9
  apacheのエラーログをみると
10
10
 
11
+ ```
12
+
11
13
  [Tue Dec 08 04:15:20.671224 2020] [:notice] [pid 37102] FastCGI: process manager initialized (pid 37102)
12
14
 
13
15
  [Tue Dec 08 04:15:20.673791 2020] [mpm_prefork:notice] [pid 37098] AH00163: Apache/2.4.46 (Unix) OpenSSL/1.0.2u PHP/7.4.9 mod_wsgi/3.5 Python/2.7.13 mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_perl/2.0.11 Perl/v5.30.1 configured -- resuming normal operations
14
16
 
15
17
  [Tue Dec 08 04:15:20.674473 2020] [core:notice] [pid 37098] AH00094: Command line: '/Applications/MAMP/Library/bin/httpd'
16
18
 
19
+ ```
20
+
17
21
  というエラーとphpのエラーログを見ると
18
22
 
23
+ ```
24
+
19
25
  [07-Dec-2020 19:15:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'pgsql.so' (tried: /Applications/MAMP/bin/php/php7.4.9/lib/php/extensions/no-debug-non-zts-20190902/pgsql.so (dlopen(/Applications/MAMP/bin/php/php7.4.9/lib/php/extensions/no-debug-non-zts-20190902/pgsql.so, 9): Library not loaded: /Applications/MAMP/Library/pg/lib/libpq.5.dylib
20
26
 
21
27
  Referenced from: /Applications/MAMP/bin/php/php7.4.9/lib/php/extensions/no-debug-non-zts-20190902/pgsql.so
@@ -28,11 +34,427 @@
28
34
 
29
35
  Reason: image not found), /Applications/MAMP/bin/php/php7.4.9/lib/php/extensions/no-debug-non-zts-20190902/pdo_pgsql.so.so (dlopen(/Applications/MAMP/bin/php/php7.4.9/lib/php/extensions/no-debug-non-zts-20190902/pdo_pgsql.so.so, 9): image not found)) in Unknown on line 0
30
36
 
37
+ ```
38
+
31
39
  と出てきて4日ほど格闘しており、お手上げ状態なので助けて欲しいです。
32
40
 
41
+ ### 現在のコード
42
+
43
+ db_connection.php
44
+
45
+ ```
46
+
47
+ <?php
48
+
49
+
50
+
51
+ const DB_HOST = 'mysql:dbname=udemy_php;host=localhost;charset=utf8';
52
+
53
+ const DB_USER = 'php_user';
54
+
55
+ const DB_PASSWORD = 'password123';
56
+
57
+
58
+
59
+
60
+
61
+ //例外 exception
62
+
63
+
64
+
65
+ try{
66
+
67
+ $pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD, [
68
+
69
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, //連想配列
70
+
71
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //例外
72
+
73
+ PDO::ATTR_EMULATE_PREPARES => false, //SQLインジェクション対策
74
+
75
+ ]);
76
+
77
+ echo '接続成功';
78
+
79
+
80
+
81
+ } catch(PDOException $e){
82
+
83
+ echo '接続失敗' . $e->getMessage() . "\n";
84
+
85
+ exit();
86
+
87
+ }
88
+
89
+ ```
90
+
91
+ index.php
92
+
93
+ ```
94
+
95
+ <?php
96
+
97
+
98
+
99
+ require 'db_connection.php';
100
+
101
+
102
+
103
+ // ユーザー入力なし query
104
+
105
+ // $sql = 'select * from contacts where id = 4'; //sql
106
+
107
+ // $stmt = $pdo->query($sql); //sql実行 ステートメント
108
+
109
+
110
+
111
+ // $result = $stmt->fetchall();
112
+
113
+
114
+
115
+ // echo '<pre>';
116
+
117
+ // var_dump($result);
118
+
119
+ // echo '</pre>';
120
+
121
+
122
+
123
+ // ユーザー入力あり prepare, bind, execute 悪意ユーザ delete * SQLインジェクション対策
124
+
125
+ $sql = 'select * from contacts where id = :id'; //名前付きプレースホルダ
126
+
127
+ $stmt = $pdo->prepare($sql);//プリペアードステートメント
128
+
129
+ $stmt->bindValue('id', 5, PDO::PARAM_INT);//紐付け
130
+
131
+ $stmt->execute(); //実行
132
+
133
+
134
+
135
+ $result = $stmt->fetchall();
136
+
137
+
138
+
139
+ echo '<pre>';
140
+
141
+ var_dump($result);
142
+
143
+ echo '</pre>';
144
+
145
+
146
+
147
+ // トランザクション まとまって処理 beginTransaction, commit, rollback
148
+
149
+ // ex)銀行 残高を確認->Aさんから引き落とし->Bさんに振込
150
+
151
+
152
+
153
+ $pdo->beginTransaction();
154
+
155
+
156
+
157
+ try{
158
+
159
+
160
+
161
+ //sql処理
162
+
163
+ $stmt = $pdo->prepare($sql);//プリペアードステートメント
164
+
165
+ $stmt->bindValue('id', 5, PDO::PARAM_INT);//紐付け
166
+
167
+ $stmt->execute(); //実行
168
+
169
+
170
+
171
+ $pdo->commit();
172
+
173
+
174
+
175
+ }catch(PDOException $e){
176
+
177
+
178
+
179
+ $pdo->rollback();//更新のキャンセル
180
+
181
+ }
182
+
183
+ ```
184
+
185
+ insert.php
186
+
187
+ ```
188
+
189
+ <?php
190
+
191
+
192
+
193
+ // DB接続 PDO
194
+
195
+
196
+
197
+ function insertContact($request){
198
+
199
+ require 'db_connection.php';
200
+
201
+
202
+
203
+
204
+
205
+ // 入力 DB保存 prepare, execute(配列(全て文字列))
206
+
207
+
208
+
209
+ $params = [
210
+
211
+ 'id' => null,
212
+
213
+ 'your_name' => $request['your_name'],
214
+
215
+ 'email' => $request['email'],
216
+
217
+ 'url' => $request['url'],
218
+
219
+ 'gender' => $request['gender'],
220
+
221
+ 'age' => $request['age'],
222
+
223
+ 'contact' => $request['contact'],
224
+
225
+ 'created_at' => null
226
+
227
+ ];
228
+
229
+
230
+
231
+ // $params = [
232
+
233
+ // 'id' => null,
234
+
235
+ // 'your_name' => 'なまえ123',
236
+
237
+ // 'email' => 'test@test.com',
238
+
239
+ // 'url' => 'http://test.com',
240
+
241
+ // 'gender' => '1',
242
+
243
+ // 'age' => '2',
244
+
245
+ // 'contact' => 'いいい',
246
+
247
+ // 'created_at' => null
248
+
249
+ // ];
250
+
251
+
252
+
253
+ $count = 0;
254
+
255
+ $columns = '';
256
+
257
+ $values = '';
258
+
259
+
260
+
261
+ foreach(array_keys($params) as $key){
262
+
263
+ if($count++>0){
264
+
265
+ $columns .= ',';
266
+
267
+ $values .= ',';
268
+
269
+ }
270
+
271
+ $columns .= $key;
272
+
273
+ $values .= ':'.$key;
274
+
275
+ }
276
+
277
+
278
+
279
+ $sql = 'insert into contacts ('. $columns .')values('. $values .')';
280
+
281
+
282
+
283
+ // var_dump($sql);
284
+
285
+ // exit;
286
+
287
+
288
+
289
+ $stmt = $pdo->prepare($sql);//プリペアードステートメント
290
+
291
+ $stmt->execute($params); //実行
292
+
293
+
294
+
295
+ }
296
+
297
+
298
+
299
+ ```
300
+
301
+ PDO.php
302
+
303
+ ```
304
+
305
+ <?php
306
+
307
+
308
+
309
+ require 'db_connection.php';
310
+
311
+
312
+
313
+ // ユーザー入力なし query
314
+
315
+ // $sql = 'select * from contacts where id = 4'; //sql
316
+
317
+ // $stmt = $pdo->query($sql); //sql実行 ステートメント
318
+
319
+
320
+
321
+ // $result = $stmt->fetchall();
322
+
323
+
324
+
325
+ // echo '<pre>';
326
+
327
+ // var_dump($result);
328
+
329
+ // echo '</pre>';
330
+
331
+
332
+
333
+ // ユーザー入力あり prepare, bind, execute 悪意ユーザ delete * SQLインジェクション対策
334
+
335
+ $sql = 'select * from contacts where id = :id'; //名前付きプレースホルダ
336
+
337
+ $stmt = $pdo->prepare($sql);//プリペアードステートメント
338
+
339
+ $stmt->bindValue('id', 5, PDO::PARAM_INT);//紐付け
340
+
341
+ $stmt->execute(); //実行
342
+
343
+
344
+
345
+ $result = $stmt->fetchall();
346
+
347
+
348
+
349
+ echo '<pre>';
350
+
351
+ var_dump($result);
352
+
353
+ echo '</pre>';
354
+
355
+ ```
356
+
357
+ transaction.php
358
+
359
+ ```
360
+
361
+ <?php
362
+
363
+
364
+
365
+ require 'db_connection.php';
366
+
367
+
368
+
369
+ // ユーザー入力なし query
370
+
371
+ // $sql = 'select * from contacts where id = 4'; //sql
372
+
373
+ // $stmt = $pdo->query($sql); //sql実行 ステートメント
374
+
375
+
376
+
377
+ // $result = $stmt->fetchall();
378
+
379
+
380
+
381
+ // echo '<pre>';
382
+
383
+ // var_dump($result);
384
+
385
+ // echo '</pre>';
386
+
387
+
388
+
389
+ // ユーザー入力あり prepare, bind, execute 悪意ユーザ delete * SQLインジェクション対策
390
+
391
+ $sql = 'select * from contacts where id = :id'; //名前付きプレースホルダ
392
+
393
+ $stmt = $pdo->prepare($sql);//プリペアードステートメント
394
+
395
+ $stmt->bindValue('id', 5, PDO::PARAM_INT);//紐付け
396
+
397
+ $stmt->execute(); //実行
398
+
399
+
400
+
401
+ $result = $stmt->fetchall();
402
+
403
+
404
+
405
+ echo '<pre>';
406
+
407
+ var_dump($result);
408
+
409
+ echo '</pre>';
410
+
411
+
412
+
413
+ // トランザクション まとまって処理 beginTransaction, commit, rollback
414
+
415
+ // ex)銀行 残高を確認->Aさんから引き落とし->Bさんに振込
416
+
417
+
418
+
419
+ $pdo->beginTransaction();
420
+
421
+
422
+
423
+ try{
424
+
425
+
426
+
427
+ //sql処理
428
+
429
+ $stmt = $pdo->prepare($sql);//プリペアードステートメント
430
+
431
+ $stmt->bindValue('id', 5, PDO::PARAM_INT);//紐付け
432
+
433
+ $stmt->execute(); //実行
434
+
435
+
436
+
437
+ $pdo->commit();
438
+
439
+
440
+
441
+ }catch(PDOException $e){
442
+
443
+
444
+
445
+ $pdo->rollback();//更新のキャンセル
446
+
447
+ }
448
+
449
+ ```
450
+
33
451
  ### 試したこと
34
452
 
453
+ [リンク内容](https://mampsupportforum.com/forums/categories/general-forum/mamp-6-0-1-29793-php-startup-unable-to-load-dynamic-library-pgsql-so)の回答者の通りpgsql.soのシンボリックリンクを作成しlibpq.5.dylibをゴミ箱にいれて実行。
454
+
455
+ [リンク内容](https://qiita.com/joe_hirata/items/94c8d56cdd0774779b39)の記事のようにターミナルからの操作ではなく、finderからphp.iniを開き;extensions=pgsql.soとコメントアウトするもダメでした。
456
+
35
- 同じようエラが出てる記事をさがして一通りやりました
457
+ 色々やりすぎて何をやったかわからくなったので、一度 MAMP, home brew, composerをアンインスト、全部再インストールし、今は何もいじってない状態です
36
458
 
37
459
 
38
460