PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

導入 - 移植性 | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

導入 - 移植性

導入 - 移植性 – データベースの移植性に関する機能

Description

データベース管理システム(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 のものと互換性のあるドライバのエラーメッセージを作ります。

    エラーコード再マップ
    ドライバ 説明 旧定数 新定数
    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 に切り替えられます。

Example

接続に移植性オプションをすべてつける

<?php
require_once 'DB.php';

$dsn 'mysql://user:password@host/database'
$options = array(
    
'debug'       => 2,
    
'portability' => DB_PORTABILITY_ALL,
);

$db =& DB::connect($dsn$options);
if (
PEAR::isError($db)) {
    die(
$db->getMessage());
}
?>

ポータビリティオプションの小文字化とトリミングを可能にするために、 setOption()を使用する

<?php
// $db という名前の DB オブジェクトが作成済みであると仮定します...
$db->setOption('portability',
        
DB_PORTABILITY_LOWERCASE DB_PORTABILITY_RTRIM);
?>

トリミング以外のポータビリティオプションをすべて可能にするために、 setOption()を使用する

<?php
// $db という名前の DB オブジェクトが作成済みであると仮定します...
$db->setOption('portability',
        
DB_PORTABILITY_ALL DB_PORTABILITY_RTRIM);
?>
忘却曲線を使ってこの知識を確実に記憶に残す

フォーラムで「導入 - 移植性」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | 導入 - 移植性」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: