[PHP-users 21296]Re: pearDBのエラーコードについて

Youichi Iwakiri yiwakiri @ st.rim.or.jp
2004年 4月 17日 (土) 16:36:15 JST


いわきりです

Kazuhiro Hiratsuka wrote in <002301c4244a$c0c851f0$320fa8c0 @ DimensionHIRA> :
>DBMS全てがSELECT文により検索結果が得られない場合にDB_OK
>が返ってくるものではありませんよ。
>DB2をご存知かどうかは知りませんが、DB2の場合エラーとなり、そのエラーコードが
>Not Foundならといったような処理をアプリで入れてあげてはならないのです。

それはそうでしょう。
いま共通の話題にしている物は、PHPのPEAR/DBクラスの話です。
QUERYが成功した場合は、DB_OKを返すのがPEAR/DBの仕様です。
どのphptype(DBMSのタイプ)を指定しようが、その差異を吸収
するために、共通化が図られています。

[PHP-users 21242]で武藤さんが薦められた、DB/phptype.phpが
何をしているかは確認しなかったのですか?
今回の場合は、DB/pgsql.phpになるのでしょうが、
PEAR/DBの流儀を無視して*勝手に*DB_ERROR_NOT_FOUNDが
返るものだとして話を進めるから、お困りだったんでしょうに。

>ちなみに今回は、postgrsSQLを使用していますが、下記のようなロジックになってい
>ます。
>
> $sqlStr = "INSERT INTO ". TBL_GRECA_CATEGORY ."(CATEGORY,REFIX_DATE)
>VALUES( '".$Category."','NOW')";
> $resp = $Conn->query($sqlStr);
> if (DB::isError($resp)) {
>    print $resp->getCode();
>    return false;
> }
>print $resp->getCode();
>return true;

お使いのPostgreSQLのversionはいくつですか?
PostgreSQL 7.4.x系だと重複時に返されるメッセージが
変更になっています。
そのため、constraint violationと誤認されます。
#間違いじゃないけど

テキストのエラーメッセージとPEAR/DBのエラーコードへの
マッピングがあっていないので7.4.x系では期待する
動作とならないでしょう。

最初から、必要十分な情報を出されていれば
一週間も無駄にせずにすんだと思いませんか?

-- 
Youichi Iwakiri



PHP-users メーリングリストの案内