質問編集履歴
4
誤字修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -37,10 +37,10 @@
|
|
37
37
|
prepare()でDBにアクセスするかどうかは、ネットを見ると意見が別れているようです。なんで???
|
38
38
|
まあデータベースハンドラのメソッドなんでDBにアクセスする可能性があるので、一応PDO::errorInfo()を組み込むことにします。
|
39
39
|
★追記
|
40
|
-
prepare()で
|
40
|
+
prepare()で変な構文だったり存在しないテーブルを指定しても、prepareの返り値がfalseになることはありませんでした。
|
41
|
-
環境の問題で、ネットワーク遮断するとどうなるかとか確認できませんでしたが、
|
41
|
+
環境の問題で、ネットワークを遮断するとどうなるかとか確認できませんでしたが、
|
42
42
|
まあおそらくDBにはアクセスしていないものと思うことにしました。
|
43
|
-
正直、phpの公式サイトに書いてるサンプルコードは役に立ちませんね。
|
43
|
+
正直、phpの公式サイトに書いてるサンプルコードは役に立ちませんね。DBのドライバによるのかと思いますが、Postgresqlの場合再現できません。
|
44
44
|
|
45
45
|
|
46
46
|
質問が3つありますが、1つでもお答えいただければ助かります。
|
3
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -36,7 +36,11 @@
|
|
36
36
|
よくわからないですが、対応方法は決めました。
|
37
37
|
prepare()でDBにアクセスするかどうかは、ネットを見ると意見が別れているようです。なんで???
|
38
38
|
まあデータベースハンドラのメソッドなんでDBにアクセスする可能性があるので、一応PDO::errorInfo()を組み込むことにします。
|
39
|
+
★追記
|
40
|
+
prepare()でsyntacs error とか存在しないテーブルを指定しても、PDO::errorInfo()の返り値がfalseになることはなかったです。
|
41
|
+
環境の問題で、ネットワーク遮断するとどうなるかとか確認できませんでしたが、
|
42
|
+
まあおそらくDBにはアクセスしていないものと思うことにしました。
|
43
|
+
正直、phpの公式サイトに書いてるサンプルコードは役に立ちませんね。
|
39
44
|
|
40
45
|
|
41
|
-
|
42
46
|
質問が3つありますが、1つでもお答えいただければ助かります。
|
2
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,26 +1,42 @@
|
|
1
|
-
phpのPDOを使ってDBを更新しているプログラムがあります。
|
1
|
+
phpのPDOを使ってDBを更新しているプログラムがあり、errorInfo()を使ってエラー情報を取得したいと思っています。
|
2
|
-
エラーコードを取得するために、PDO::errorInfo()を使う予定ですが、
|
3
|
-
erroInfo()による取得できた配列の2番目に「ドライバ固有のエラーコード」を取れるようです。
|
4
|
-
http://php.net/manual/ja/pdo.errorinfo.php
|
5
2
|
|
6
3
|
※エラー発生時にexceptionを発生する設定にすれば簡単に行くのは知っていますが、
|
7
4
|
諸事情によりerrorInfo()を使った方法でしか実現したいです。
|
8
5
|
|
9
6
|
<質問1>
|
7
|
+
エラーコードを取得するために、PDO::errorInfo()を使う予定ですが、
|
8
|
+
erroInfo()による取得できた配列の2番目に「ドライバ固有のエラーコード」を取れるようです。
|
9
|
+
http://php.net/manual/ja/pdo.errorinfo.php
|
10
10
|
しかし、どんだけWebを探しても、「ドライバ固有のエラーコード」の一覧を見つけられません。
|
11
11
|
DBはPostgresです。
|
12
12
|
ご存知のかた、URLを教えていただけないですか。
|
13
13
|
|
14
|
+
★追記
|
15
|
+
相変わらずわからないです。正直、「ドライバ固有のエラーメッセージ」が出れば問題ないと思うので、よしとします。
|
16
|
+
もし、分かる人がいれば教えてください。
|
17
|
+
|
14
18
|
<質問2>
|
15
19
|
また、キー重複になるようなInsert文を作成し、execute実行後にerrorInfo()を動かしてみましたが、
|
16
20
|
何故か「SQLSTATE エラーコード」が正常(00000)で帰ってきており、
|
17
21
|
「ドライバ固有のエラーメッセージ」にはキー重複に関するメッセージが帰ってきました。
|
18
|
-
|
22
|
+
なぜ、00000が帰ってきたのでしょうか?
|
19
23
|
PDOStatement::errorInfo()を使えば、正しい「SQLSTATE エラーコード」を取得できるのは確認していますが、http://php.net/manual/ja/pdo.errorinfo.phpを見てもPDO::errorInfo()のだめな理由がよくわかりません。
|
20
24
|
|
25
|
+
★追記
|
26
|
+
おそらくですが、わかりました。
|
27
|
+
PDO::errorInfo()は、「データベースハンドラにおける直近の操作に関連する SQLSTATE を取得する」ようです。ですので、PDOのnew したオブジェクトのメソッド(prepare、rollback、commitなど)を実行したときに発生したエラーのみ取得できると思われます。
|
28
|
+
PDOStatement::errorInfo()はprepareStatementオブジェクトのメソッドを実行(executeなど)を実行したときに発生したエラーのみ取得できるエラーのようですね。
|
29
|
+
|
21
30
|
<質問3>
|
22
31
|
prepare()でエラーが発生する可能性がわかったので、prepare()の実行結果に問題があった場合(返り値がfalse)、PDO::errorInfo()を使って情報を取得しようとしています。
|
23
32
|
http://php.net/manual/ja/pdo.errorinfo.php にもある通り、エラー情報を取得できる記述がありますが、<質問2>に書いたとおり問題が発生したのにも関わらず「SQLSTATE エラーコード」が正常(00000)となることを懸念しています。
|
24
33
|
ちゃんと「SQLSTATE エラーコード」を取得できるのでしょうか。
|
25
34
|
|
35
|
+
★追記
|
36
|
+
よくわからないですが、対応方法は決めました。
|
37
|
+
prepare()でDBにアクセスするかどうかは、ネットを見ると意見が別れているようです。なんで???
|
38
|
+
まあデータベースハンドラのメソッドなんでDBにアクセスする可能性があるので、一応PDO::errorInfo()を組み込むことにします。
|
39
|
+
|
40
|
+
|
41
|
+
|
26
42
|
質問が3つありますが、1つでもお答えいただければ助かります。
|
1
誤字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
erroInfo()による取得できた配列の2番目に「ドライバ固有のエラーコード」を取れるようです。
|
4
4
|
http://php.net/manual/ja/pdo.errorinfo.php
|
5
5
|
|
6
|
+
※エラー発生時にexceptionを発生する設定にすれば簡単に行くのは知っていますが、
|
7
|
+
諸事情によりerrorInfo()を使った方法でしか実現したいです。
|
8
|
+
|
6
9
|
<質問1>
|
7
10
|
しかし、どんだけWebを探しても、「ドライバ固有のエラーコード」の一覧を見つけられません。
|
8
11
|
DBはPostgresです。
|
@@ -20,4 +23,4 @@
|
|
20
23
|
http://php.net/manual/ja/pdo.errorinfo.php にもある通り、エラー情報を取得できる記述がありますが、<質問2>に書いたとおり問題が発生したのにも関わらず「SQLSTATE エラーコード」が正常(00000)となることを懸念しています。
|
21
24
|
ちゃんと「SQLSTATE エラーコード」を取得できるのでしょうか。
|
22
25
|
|
23
|
-
|
26
|
+
質問が3つありますが、1つでもお答えいただければ助かります。
|