アフィリエイト広告を利用しています
検索
<< 2024年11月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。
プロフィール

2023年05月01日

PHPのPDOからエラーコードを取得する方法 [プログラム究室]


 こんにちは!
 ナビゲータのEVEです。

 今日も、プログラム修正で、特定の箇所で多くの時間が取られてしまいました。

[今日の問題点]
 今日の問題点は、エラーコードの取得方法です。最近の修正でテキスト(※1)にエラーコードの取得方法が記載されており、難しいロジックではなかったので、1行追加して試験をしていなかったのですが、DB関連関数以外でキーの重複エラーが発生しても、次の処理を行うプログラムが複数あったため、今日は同修正部分の動作を確認しました。以下のコードの@〜Cでは、正確な値が取得できませんでした。



//SQL文実行処理
try {

//レコード追加メソッドを実行する
$rtn = $this->stmt->execute();
C$this->getDbConnect->errorCode();


} catch (PDOException $e) {

//エラーコードを取得する
@$this->getDbConnect->errorCode();
A$this->getDbConnect->errorInfo();
B$this->$this->stmt->errorCode();
$this->setErrorNo($e->errorInfo[1]);

//レコード追加処理が失敗した場合
//異常処理結果のメッセージを設定する

$this->setErrorMessage($e->getMessage());

//サーバーサイト変数を削除する
unset($_SESSION["ret"]);

//返却値を設定して呼び出し元へ制御を移す
return false;
}



 @の「@$this->getDbConnect->errorCode();」、DBに接続するためのインスタンスからエラーコードを取得しようとしているものです。それでエラーコードを取得しようとすると、コードが"00000"です。ただ、$e->getMessage();では、エラーが拾えているので、エラーが発生しているのは確かです。
 そして、Aの「$this->getDbConnect->errorInfo();」で取得できる値は配列です。その時点で違うと思ったのですが、このときダンプを取っていれば、もしかしたら最短でこの問題を解決できたかもしれません。
 続いて、Bの「$this->stmt->errorCode();」実行時のステートメントなのですが、このときには、エラーコードが出力されて"23000"。ただ、これいろいろなエラーの時に「SQLSTATE[23000]」って感じで表示されるコードです。今回は、重複エラーが発生した場合のエラーコード"1062"を取得したいので、NGです。
 そしてCなのですが、catchに入ってからは取得できないのでは?なんて考えて、SQL文実行直後に入れてみました。これtry〜catchの確認試験で、tryでエラーが発生した直後、後続にどんなロジックがあっても、catchに飛ぶと調べて分かっているのに、ここにもロジックを入れて確認してしまいました。これも当然NGです。

 何やってもうまくいかないので、インターネットでいろいろ調べて行き着いたのが、「$e->errorInfo[1]」・・・。PDOException $eで取得した変数$eにエラーコードが入っていたようです。これで、やっと問題解決。疲れました。

[あとがき]
 今日は、この作業だけでなく、Update文、Delete文も修正が完了しました。明日からは計画していたプログラム修正に入れる予定です。はじめてやる事って大変なんですよね(笑)。ビックバンテスト今から憂鬱です。ただ、実はそれも楽しみなんですけれどね!

 では、また!

■Prototype EVE変更プログラム進捗状況
★DB関連関数以外
 修正ファイル本数 5/29本(0本ファイル修正)
 修正箇所     192/396

※1)テキストとは、独習PHPではありません。別な資料を参考としていました。なお、現在気づいた内容としては、独習PHPには、errorCode、errorInfoともP435に記載がございました。

この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/11965972
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック