• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DBI トランザクション中の予期されるエラーとそうでないエラーの振り分け)

DBI トランザクション中の予期されるエラーとそうでないエラーの振り分け

このQ&Aのポイント
  • DBI トランザクション中に予期されるエラーとそうでないエラーを振り分ける方法
  • ユニークなカラムにランダムな文字列を挿入する場合のエラーハンドリング方法
  • DBI トランザクションのエラー分類における文字列マッチング以外の方法はあるか

質問者が選んだベストアンサー

  • ベストアンサー
  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.2

相変わらすMySQL環境が無いので・・・ google code search(http://www.google.com/codesearch)で 「perl DBI mysql 1062」くらいで検索してみたら、 「if($DBI::err==1062)」と判定しているものが見つかりました。 今後のバージョンupでエラー番号が変わる事は よほどの事が無い限りないと思いますので、 この1062を使った方法で良いのではないかと思います。 もちろんユニークな文字列が生成できるのなら、 その方がやり直しがないので、性能的にも良いですね。 time.$$ は(定義の話になると疑問ですが、少なくとも現実的には) まずユニークと思って良いと思います。 セッションIDのような用途で使うにはカンタンすぎるので、 何かしらもう一工夫必要でしょうけど。

sweepea
質問者

お礼

回答ありがとうございます。 >もちろんユニークな文字列が生成できるのなら、 >その方がやり直しがないので、性能的にも良いですね。 >time.$$ は(定義の話になると疑問ですが、少なくとも現実的には) >まずユニークと思って良いと思います。 確かにそうですね。 >セッションIDのような用途で使うにはカンタンすぎるので、 >何かしらもう一工夫必要でしょうけど。 以前、time.$$にランダム文字列を加えたものを、 ほぼユニークであろうということで、商用で利用していましたので、 やっぱりその路線で行こうと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.1

文字列マッチングではエラー種類の判定が心許ない状況ならば、 $DBI::errが使えるのではないかと思います。 エラーコードが数値で入るハズです。 という事はDBI::errstrには エラー番号は含まれていませんでしたか・・・ (以前の質問への回答では)どうせerrstr中にエラー番号も 含まれていると思って、errstrの方を使ってしまいました。

sweepea
質問者

補足

前回はありがとうございました。 各DBI変数は、以下のようなメッセージをはきます。 $DBI::err 1062 at 'CGIのパス'・・・ $DBI::errstr Duplicate entry '文字列' for key 2 at 'CGIのパス'・・・ $DBI::state S1000 at 'CGIのパス'・・・ この場合、1062がユニーク違反というこのになると思うのですが、 私が心許ないと思っているのは、万が一マッチングの文字列にスペルミスが あるとnextせずにdieしてしまうことや、MySQLをバージョンアップした際や、 今後エラーメッセージが変更してしまうのではないかという疑問があるからです。 それとも単純にPerl側で確実にユニークな文字列を生成してやればいいだけですかね? 例えば、time . $$ で確実にユニークになりますでしょうか? もしくはユニークはあきらめて、INSERTした行のシリアルと紐付けてやるとか がいいのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A