説明
データベースオブジェクトを作成するには、MDB2
のいくつかのメソッドを使用します。
表 39-1接続用の関数
| 関数 | 要点 | 説明 |
|---|
|
factory()
| 効率的 (Efficient) |
新しい MDB2_Driver_Common のインスタンスを作成しますが、
必要になるまでデータベースには接続しません。
実際の接続を確立するのを、後に引き伸ばします。これを、怠惰な (lazy)
接続といいます。これを使用する価値があるのは、
たとえばアプリケーション内部で接続をキャッシュしており、
新たな接続を確立する必要がない場合などです。
|
|
connect()
| 熱血型 (Eager) |
新しい MDB2_Driver_Common のインスタンスを作成し、
すぐにデータベースとの接続を確立します。
接続時に問題が発生した場合は、すぐにエラーが発生します。
|
|
singleton()
| 使用可能 (Available) |
MDB2_Driver_Common のインスタンスを返します。新しい
MDB2_Driver_Common
オブジェクトが作成されるのは最初に factory()
を使用したときだけで、それ以降に singleton がコールされると
既存のオブジェクトへの参照が返されます。
このメソッドは、データベースオブジェクトをグローバルに使用したい場合にお勧めです。
|
データベースに接続するには、
factory()、
connect() あるいは
singleton() のいずれかの関数を使用します。
これらの関数には、最初のパラメータとして
DSN
を指定しなければなりません。このパラメータは、
文字列あるいは配列のどちらの形式でも指定できます。
配列を使用する場合は、配列の内容がデフォルトの情報にマージされます。
$dsn = array(
'phptype' => false,
'dbsyntax' => false,
'username' => false,
'password' => false,
'protocol' => false,
'hostspec' => false,
'port' => false,
'socket' => false,
'database' => false,
'new_link' => false,
'service' => false, // oci8 のみ
); |
あなたが設定した要素がこのデフォルトを上書きし、残りはデフォルトのままとなります。
二番目のパラメータは、オプションの配列 $options
で、このパッケージ用の実行時設定を指定します。
表 39-2オプションの一覧
| 名前 | 型 | 説明 |
|---|
| ssl | boolean |
接続に ssl を使用するかどうかを指定します。
|
| field_case | integer |
CASE_LOWER あるいは CASE_UPPER のいずれかで、
フィールド名/テーブル名を強制的に小文字/大文字に変換します。
|
| disable_query | boolean |
クエリを実行するかどうかを指定します。
|
| result_class | string |
結果セットに使用するクラスです。
|
| buffered_result_class | string |
バッファリングした結果セットに使用するクラスで、デフォルトは
MDB2_Result_Common です。
|
| result_wrap_class | string |
結果セットをラップするクラスで、デフォルトは
MDB2_Result_Common です。
|
| result_buffering | boolean |
結果セットをバッファリングするかどうかを指定します。
|
| fetch_class | string |
フェッチモードオブジェクトを使用する場合に用いるクラスです。
|
| persistent | boolean |
持続的な接続を使用するかどうかを指定します。
|
| debug | integer |
デバッグレベルを表す数値。
|
| debug_handler | string |
デバッグメッセージを受け取る関数/メソッド。
|
| debug_expanded_output | boolean |
過去との互換性のためのオプションで、
デバッグハンドラに詳細な情報を送るかどうかを指定します。
|
| default_text_field_length | integer |
テキストフィールドのデフォルトの長さとして使用する値。
|
| lob_buffer_length | integer |
LOB バッファの長さ。
|
| log_line_break | string |
改行のフォーマット。
|
| idxname_format | string |
インデックス名における '%s' に使用するパターン。
|
| seqname_format | string |
シーケンス名における '%s' に使用するパターン。
|
| savepoint_format | string |
自動生成されるセーブポイント名における '%s'
に使用するパターン。
|
| seqcol_name | string |
シーケンスカラムの名前。
|
| quote_identifier | boolean |
check_option の使用時に識別子のクォートを行うかどうか。
|
| use_transactions | boolean |
トランザクションを使用するかどうか。
|
| decimal_places | integer |
小数点以下で処理する桁数。
|
| portability | integer |
可搬性に関する定数。
|
| modules | array |
__call() で使用する、短いモジュール名と長いモジュール名との対応。
|
| emulate_prepared | boolean |
プリペアドステートメントを強制的にエミュレートします。
|
| datatype_map | array |
ユーザ定義のデータ型と、その他のプリミティブデータ型との対応。
|
| datatype_map_callback | array |
コールされるコールバック関数/メソッド。
|
接続に成功すると、データベースクラスの新しいインスタンスを取得できます。
返される値を
PEAR::isError()
(これは、PEAR_Error およびそのサブクラスを検出します) あるいは
MDB2_Driver_Common 独自の
isError()
で調べることを、強く推奨します。
接続を解除するには、データベースクラスのインスタンスの
disconnect()
メソッドを使用します。
例 39-1接続および接続の解除
<?php
require_once 'MDB2.php';
$dsn = 'pgsql://someuser:apasswd@localhost/thedb';
$options = array(
'debug' => 2,
'result_buffering' => false,
);
$mdb2 =& MDB2::factory($dsn, $options);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
// ...
$mdb2->disconnect();
?>
|
|
例 39-2配列形式の DSN を使用した接続
<?php
require_once 'MDB2.php';
$dsn = array(
'phptype' => 'pgsql',
'username' => 'someuser',
'password' => 'apasswd',
'hostspec' => 'localhost',
'database' => 'thedb',
);
$options = array(
'debug' => 2,
'portability' => MDB2_PORTABILITY_ALL,
);
// MDB2::factory() を使用して、インスタンスの作成と
// ホストへの接続を行います。
$mdb2 =& MDB2::connect($dsn, $options);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
?>
|
SQLite に対して配列形式の DSN に接続する場合、
mode 要素の値は文字列でなければなりません。
<?php
$dsn = array(
'phptype' => 'sqlite',
'database' => 'thedb',
'mode' => '0644',
);
?>
|
|
例 39-3
配列形式の DSN を使用した、SSL による
MySQLi への接続
SSL を使用するには、
$options 配列の要素
ssl を TRUE にしなければなりません。
配列 $dsn の追加要素
(以下の例における key から
cipher まで) は必須ではありません。。
<?php
require_once 'MDB2.php';
$dsn = array(
'phptype' => 'mysqli',
'username' => 'someuser',
'password' => 'apasswd',
'hostspec' => 'localhost',
'database' => 'thedb',
'key' => 'client-key.pem',
'cert' => 'client-cert.pem',
'ca' => 'cacert.pem',
'capath' => '/path/to/ca/dir',
'cipher' => 'AES',
);
$options = array(
'ssl' => true,
);
// 同じ DSN で接続した既存のインスタンスを取得します。
// 存在しない場合は MDB2::factory() で新しいインスタンスを作成します。
$mdb2 =& MDB2::singleton($dsn, $options);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
?>
|
|
例 39-4ソケットを使用した PostgreSQL データベースへの接続
<?php
require_once 'MDB2.php';
$dsn = 'pgsql://someuser:apasswd@unix(/tmp)/thedb';
$options = array(
'debug' => 2,
'portability' => MDB2_PORTABILITY_ALL,
);
$mdb2 =& MDB2::factory($dsn, $options);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
?>
|
|
例 39-5シングルトンを使用した接続
<?php
require_once 'MDB2.php';
$dsn = 'pgsql://someuser:apasswd@localhost/thedb';
$mdb2 =& MDB2::singleton($dsn);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
$blah =& new blah();
// 既存のデータベース接続を使用することが可能です
$blah->foo();
$mdb2->disconnect();
class blah
{
function foo() {
// 既存のデータベースオブジェクトへの参照を取得します
$mdb2 =& MDB2::singleton();
// ...
}
}
?>
|
|
|
DSN (Previous)
|
(Next) クエリ
|
|
|
Download Documentation
|
Last updated: Sun, 07 Sep 2008 |
|
Do you think that something on this page is wrong? Please file a bug report or add a note.
|
| User Notes: |
Note by: CJ
A helpful note that took me days to figure out:
When connecting to a MSSQL database, specify the hostname as: "my.host.name,PORT". Don't use a colon, use a comma. That took so long!
Note by: user@example.com
In PHP5 all objects are passed by reference similar to the way Java does it.
From: http://www.php.net/manual/en/language.oop5.basic.php
"When assigning an already created instance of a class to a new variable, the new variable will access the same instance as the object that was assigned. This behaviour is the same when passing instances to a function. A copy of an already created object can be made by cloning it."
Is this really true here ?
Quote: "new return reference automatically"
When i read it correctly its just for explicit usage of "new" but thats not the case, we use the Factory methods to get our MDB2 Object.
Note by: user@example.com
Note that using =& to assign objects is deprecated in PHP5:
"Since PHP 5, new return reference automatically so using =& in this context is deprecated and produces E_STRICT level message."
|
|