可搬性

可搬性 – データベースの可搬性に関する機能

Description

それぞれのデータベース管理システム (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 には適用されません。たとえ可変長文字列で右側がトリムされていなくても同じです。

Example

接続の際に、可搬性に関する機能をすべて無効にする

<?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);
?>
SQL 文を自動的に準備・実行する (Previous) シーケンスおよび自動採番 (Next)
Last updated: Fri, 24 Oct 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.