それぞれのデータベース管理システム (DBMS) には固有のクセがあります。 例えば、出力時にフィールド名を大文字に変換するものもあれば、 逆に小文字に変換するものもあります。 また変換せずにそのまま出力するものもあります。これらの違いのせいで、 作成したスクリプトを他のサーバで実行することが難しくなっています。 PEAR MDB2 はこれらの違いを乗りこえることに力を入れているので、 あなたが作成したプログラムは何の変更もなしで他の DBMS に移行できることでしょう。
可搬性に関するモードのうち、どれを有効にするかについては
設定オプション portability
で制御します。オプションは
factory() および
setOption() で設定します。
可搬性に関するモードはビット単位で指定するので、組み合わせる場合には
|
、取り除く場合には ^
を使用します。
実際の方法については、以下の例を参照ください。
注意: MDB2 の可搬性モードは、返り値にのみ影響を及ぼします。
クエリ自体にはかかわりません。たとえば、識別子を含む名前のテーブルを作成した場合は、
すべてのクエリで quoteIdentifier() を使用する必要があります。
そうしないと "not found" や "not exists" といったエラーが発生します。
また、quote_identifier
オプションも確認しましょう。
これが false の場合は、check_option を使用してもクォートは適用されません。
MDB2_PORTABILITY_ALL (デフォルト)
すべての可搬性機能を有効にします。デフォルト設定です。
MDB2_PORTABILITY_DELETE_COUNT
削除された行数を強制的に取得します。
単純な DELETE FROM tablename
クエリを実行した場合に、削除された行数を返さない DBMS があります。
このモードは、そんな DBMS から削除された行数を取得するために、
DELETE クエリの最後に
WHERE 1=1
を追加します。
MDB2_PORTABILITY_EMPTY_TO_NULL
入出力データの空文字列を null に変換します。 Oracle は空の文字列を null と判断するため、これが必要になります。 一方、他の大半の DBMS は空の文字列と null を区別します。
MDB2_PORTABILITY_ERRORS
特定のドライバのエラーメッセージを、他の DBMS と互換性のあるものに変換します。
ドライバ | 説明 | 変更前の定数 | 変更後の定数 |
---|---|---|---|
mysql, mysqli | ユニークキーおよび主キー制約 | MDB2_ERROR_ALREADY_EXISTS | MDB2_ERROR_CONSTRAINT |
mysql, mysqli | NOT NULL 制約 | MDB2_ERROR_CONSTRAINT | MDB2_ERROR_CONSTRAINT_NOT_NULL |
MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES
これは、連想配列のキーからすべての修飾子を取り除きます。 例えば SQLite のデフォルト設定では、修飾子つきのクエリで結果を取得すると カラム名の修飾子が付加されます。
MDB2_PORTABILITY_FIX_CASE
すべてのメソッドにおいて、テーブルやフィールドの名前を
小文字あるいは大文字に変換します。どちらに変換するのかは、
オプション field_case
の設定に依存します。このオプションは
CASE_LOWER (デフォルト) あるいは
CASE_UPPER を指定します。
注意: この変換は、返り値に対してのみ適用されます。
クエリ内のフィールド名やテーブル名には適用されません。
MDB2_PORTABILITY_NONE
すべての可搬性に関する機能を無効にします。
MDB2_PORTABILITY_NUMROWS
numRows() を Oracle で動作させるハックを有効にします。
MDB2_PORTABILITY_RTRIM
取得したデータの右側にある空白をすべて取り除きます。 これは、固定長文字列の右側を自動的にトリムするような RDBMS には適用されません。たとえ可変長文字列で右側がトリムされていなくても同じです。
接続の際に、可搬性に関する機能をすべて無効にする
<?php
require_once 'MDB2.php';
$dsn = 'mysql://user:password@host/database'
$options = array(
'debug' => 2,
'portability' => MDB2_PORTABILITY_NONE,
);
$mdb2 =& MDB2::connect($dsn, $options);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
?>
setOption() を使用して、 小文字変換と空白除去の機能を有効にする
<?php
// すでに $mdb2 という名前の MDB2 オブジェクトが存在するものとします
$mdb2->setOption('field_case', CASE_LOWER);
$mdb2->setOption('portability',
MDB2_PORTABILITY_FIX_CASE | MDB2_PORTABILITY_RTRIM);
?>
setOption() を使用して、 空白除去以外のすべての可搬性機能を有効にする
<?php
// すでに $mdb2 という名前の MDB2 オブジェクトが存在するものとします
$mdb2->setOption('portability',
MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_RTRIM);
?>