データベース管理システム(DBMS)は、 それぞれそれ独自の振る舞いを持っています。 例えば、いくつかのデータベースは、 それらの出力でのフィールド名を大文字化や小文字、 一方でそのままにしておきます。 これらのクセは、 別のサーバータイプにあなたのスクリプトの実装を困難にします。 あなたのプログラムが変更せずにDBMSの間で切りえられるように、 PEAR DBは差を克服するために努めます。
設定オプション portability を使用することで、 どのポータビリティモードが可能になるかを制御します。 設定オプションは、 connect() と setOption() で設定します。
ポータビリティモードはビット演算で、 |を結合に使用し、 ^で削除をすることが出来ます。 下記にあるこれらの使用例を参照してください。
DB_PORTABILITY_ALL
総てのポータビリティ機能を有効にします。
DB_PORTABILITY_DELETE_COUNT
レコードの削除数を強制的に報告します。単純な DELETE FROM tablename のクエリを行なう時、削除された列の数を数えない DBMS も存在します。 このモードは、DELETE のクエリの最後に WHERE 1=1 を加えることにより、 カウントを知らせるように DBMS を騙します。 queries.
DB_PORTABILITY_ERRORS
他の DBMS のものと互換性のあるドライバのエラーメッセージを作ります。
表 39-1エラーコード再マップ
ドライバ | 説明 | 旧定数 | 新定数 |
---|---|---|---|
mysql, mysqli | ユニークキーおよび主キー制約 | DB_ERROR_ALREADY_EXISTS | DB_ERROR_CONSTRAINT |
mysql, mysqli | 非 NULL 制約 | DB_ERROR_CONSTRAINT | DB_ERROR_CONSTRAINT_NOT_NULL |
odbc(access) | MS の ODBC ドライバは、'no_such_field' の際に誤って コード 07001 と報告します。 このコードは、実際には 'too few parameters' を意味します。 このオプションがオンの場合、そのコードは再マップされます。 | DB_ERROR_MISMATCH | DB_ERROR_NOSUCHFIELD |
DB_PORTABILITY_LOWERCASE
get*()、fetch*() と tableInfo() 使用する場合、 テーブルとフィールドの名前を小文字に変換します。
DB_PORTABILITY_NONE (デフォルト)
ポータビリティ機能をすべて切ります。
DB_PORTABILITY_NULL_TO_EMPTY
get*() および fetch*() によるデータ出力で NULL 値があった場合に、それを空の文字列に変換します。 大半の DBMS は空の文字列と NULL を区別しますが、Oracle は 空の文字列を NULL と解釈します。そのためにこの定数が必要となります。
DB_PORTABILITY_NUMROWS
numRows() を Oracle で動作させるハックを有効にします。
DB_PORTABILITY_RTRIM
get*() と fetch*() の出力を、 右トリミングします。
この機能のうちいくつかは、廃止予定である optimize オプションによって処理されます。 過去との互換性を確保するため、もしこのオプションが portability に設定されていた場合は 以下のデータベースでこれらのポータビリティモードを有効にします。
oci8: DB_PORTABILITY_LOWERCASE および DB_PORTABILITY_DELETE_COUNT
fbsql, mysql, mysqli, sqlite: DB_PORTABILITY_DELETE_COUNT
optimize オプションが performance にセットされる場合、 ポータビリティモードは DB_PORTABILITY_NONE に切り替えられます。
例 39-1接続に移植性オプションをすべてつける
|
例 39-2 ポータビリティオプションの小文字化とトリミングを可能にするために、 setOption()を使用する
|
例 39-3 トリミング以外のポータビリティオプションをすべて可能にするために、 setOption()を使用する
|