teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

見直し

2019/09/16 06:08

投稿

退会済みユーザー
answer CHANGED
@@ -7,14 +7,14 @@
7
7
  エラーなどでその処理をしてはいけないのであれば、
8
8
 
9
9
  ```php
10
+ if (isset($_POST['userID'])) { // DBアクセスに必要な変数が揃っていることをisset()で確認、もしも複数の変数が必要ならここで&&条件ですべて確認しておくとよい
10
- if (isset($_POST['userID'])) {
11
+ try { // DBアクセスの処理をこの中に
11
- try {
12
12
  ~~
13
13
  }
14
- catch(PDOException $error) {
14
+ catch(PDOException $error) { // DBアクセス時の例外をココでキャッチ
15
15
  ~~
16
16
  }
17
- catch(Exception $error) {
17
+ catch(Exception $error) { // 起こりにくいかもしれないけどDB以外の部分で例外発生したらココでキャッチ
18
18
  ~~
19
19
  }
20
20
  }

2

見直し

2019/09/16 06:08

投稿

退会済みユーザー
answer CHANGED
@@ -19,4 +19,14 @@
19
19
  }
20
20
  }
21
21
  ```
22
- などとすればよいかと。
22
+ などとすればよいかと。
23
+
24
+ もう一点、
25
+ ```php
26
+ $stmt->bindParam('userID', $temp, PDO::PARAM_STR);
27
+ ```
28
+ でなく
29
+ ```php
30
+ $stmt->bindValue(':userID', $temp, PDO::PARAM_STR);
31
+ ```
32
+ だね。[PHP: PDOStatement::bindValue - Manual](https://www.php.net/manual/ja/pdostatement.bindvalue.php)参照。

1

加筆修正

2019/09/16 06:03

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,22 @@
1
1
  「Notice: Undefined index: userID 」が出るってことは、`'userID'`をキーにした配列の参照をしようとして値が詰められていなかった場合。
2
2
 
3
3
  `isset($_POST['userID'])`で存在チェックをするときは、そういうエラーは出ないものの、
4
- おそらくechoの行と`$temp = $_POST['userID'];`の行で参照してそのときのエラーだろうね。
4
+ おそらくechoの行と`$temp = $_POST['userID'];`の行で参照してそのときのエラーだろうね。
5
+
6
+ try以降の処理は、`$_POST['userID']`が存在する時に行うべきで、
7
+ エラーなどでその処理をしてはいけないのであれば、
8
+
9
+ ```php
10
+ if (isset($_POST['userID'])) {
11
+ try {
12
+ ~~
13
+ }
14
+ catch(PDOException $error) {
15
+ ~~
16
+ }
17
+ catch(Exception $error) {
18
+ ~~
19
+ }
20
+ }
21
+ ```
22
+ などとすればよいかと。