質問編集履歴

4

誤字修正

2017/10/24 09:24

投稿

mi-c3
mi-c3

スコア20

test CHANGED
File without changes
test CHANGED
@@ -76,13 +76,13 @@
76
76
 
77
77
  ★追記
78
78
 
79
- prepare()でsyntacs error とか存在しないテーブルを指定しても、PDO::errorInfo()の返り値がfalseになることはなかっです
79
+ prepare()で変な構文だったり存在しないテーブルを指定しても、prepareの返り値がfalseになることはありませんでした。
80
80
 
81
- 環境の問題で、ネットワーク遮断するとどうなるかとか確認できませんでしたが、
81
+ 環境の問題で、ネットワーク遮断するとどうなるかとか確認できませんでしたが、
82
82
 
83
83
  まあおそらくDBにはアクセスしていないものと思うことにしました。
84
84
 
85
- 正直、phpの公式サイトに書いてるサンプルコードは役に立ちませんね。
85
+ 正直、phpの公式サイトに書いてるサンプルコードは役に立ちませんね。DBのドライバによるのかと思いますが、Postgresqlの場合再現できません。
86
86
 
87
87
 
88
88
 

3

追記

2017/10/24 09:24

投稿

mi-c3
mi-c3

スコア20

test CHANGED
File without changes
test CHANGED
@@ -74,7 +74,15 @@
74
74
 
75
75
  まあデータベースハンドラのメソッドなんでDBにアクセスする可能性があるので、一応PDO::errorInfo()を組み込むことにします。
76
76
 
77
+ ★追記
77
78
 
79
+ prepare()でsyntacs error とか存在しないテーブルを指定しても、PDO::errorInfo()の返り値がfalseになることはなかったです。
80
+
81
+ 環境の問題で、ネットワーク遮断するとどうなるかとか確認できませんでしたが、
82
+
83
+ まあおそらくDBにはアクセスしていないものと思うことにしました。
84
+
85
+ 正直、phpの公式サイトに書いてるサンプルコードは役に立ちませんね。
78
86
 
79
87
 
80
88
 

2

追記

2017/10/24 09:09

投稿

mi-c3
mi-c3

スコア20

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,4 @@
1
- phpのPDOを使ってDBを更新しているプログラムがあります。
1
+ phpのPDOを使ってDBを更新しているプログラムがあり、errorInfo()を使ってエラー情報を取得したいと思っています。
2
-
3
- エラーコードを取得するために、PDO::errorInfo()を使う予定ですが、
4
-
5
- erroInfo()による取得できた配列の2番目に「ドライバ固有のエラーコード」を取れるようです。
6
-
7
- http://php.net/manual/ja/pdo.errorinfo.php
8
2
 
9
3
 
10
4
 
@@ -16,11 +10,25 @@
16
10
 
17
11
  <質問1>
18
12
 
13
+ エラーコードを取得するために、PDO::errorInfo()を使う予定ですが、
14
+
15
+ erroInfo()による取得できた配列の2番目に「ドライバ固有のエラーコード」を取れるようです。
16
+
17
+ http://php.net/manual/ja/pdo.errorinfo.php
18
+
19
19
  しかし、どんだけWebを探しても、「ドライバ固有のエラーコード」の一覧を見つけられません。
20
20
 
21
21
  DBはPostgresです。
22
22
 
23
23
  ご存知のかた、URLを教えていただけないですか。
24
+
25
+
26
+
27
+ ★追記
28
+
29
+ 相変わらずわからないです。正直、「ドライバ固有のエラーメッセージ」が出れば問題ないと思うので、よしとします。
30
+
31
+ もし、分かる人がいれば教えてください。
24
32
 
25
33
 
26
34
 
@@ -32,9 +40,19 @@
32
40
 
33
41
  「ドライバ固有のエラーメッセージ」にはキー重複に関するメッセージが帰ってきました。
34
42
 
35
- これはどうしてでしょうか
43
+ なぜ、00000が帰っきたのでしょうか
36
44
 
37
45
  PDOStatement::errorInfo()を使えば、正しい「SQLSTATE エラーコード」を取得できるのは確認していますが、http://php.net/manual/ja/pdo.errorinfo.phpを見てもPDO::errorInfo()のだめな理由がよくわかりません。
46
+
47
+
48
+
49
+ ★追記
50
+
51
+ おそらくですが、わかりました。
52
+
53
+ PDO::errorInfo()は、「データベースハンドラにおける直近の操作に関連する SQLSTATE を取得する」ようです。ですので、PDOのnew したオブジェクトのメソッド(prepare、rollback、commitなど)を実行したときに発生したエラーのみ取得できると思われます。
54
+
55
+ PDOStatement::errorInfo()はprepareStatementオブジェクトのメソッドを実行(executeなど)を実行したときに発生したエラーのみ取得できるエラーのようですね。
38
56
 
39
57
 
40
58
 
@@ -48,4 +66,18 @@
48
66
 
49
67
 
50
68
 
69
+ ★追記
70
+
71
+ よくわからないですが、対応方法は決めました。
72
+
73
+ prepare()でDBにアクセスするかどうかは、ネットを見ると意見が別れているようです。なんで???
74
+
75
+ まあデータベースハンドラのメソッドなんでDBにアクセスする可能性があるので、一応PDO::errorInfo()を組み込むことにします。
76
+
77
+
78
+
79
+
80
+
81
+
82
+
51
83
  質問が3つありますが、1つでもお答えいただければ助かります。

1

誤字の修正

2017/10/24 07:52

投稿

mi-c3
mi-c3

スコア20

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,12 @@
5
5
  erroInfo()による取得できた配列の2番目に「ドライバ固有のエラーコード」を取れるようです。
6
6
 
7
7
  http://php.net/manual/ja/pdo.errorinfo.php
8
+
9
+
10
+
11
+ ※エラー発生時にexceptionを発生する設定にすれば簡単に行くのは知っていますが、
12
+
13
+ 諸事情によりerrorInfo()を使った方法でしか実現したいです。
8
14
 
9
15
 
10
16
 
@@ -42,4 +48,4 @@
42
48
 
43
49
 
44
50
 
45
- 長々と書きしたが、よろしくます。
51
+ 質問が3つありが、1つでも答えただければ助かります。