データベースオブジェクトを作成するには、MDB2 のいくつかのメソッドを使用します。
関数 | 要点 | 説明 |
---|---|---|
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
で、このパッケージ用の実行時設定を指定します。
名前 | 型 | 説明 |
---|---|---|
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() メソッドを使用します。
接続および接続の解除
<?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();
?>
配列形式の 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',
);
?>
配列形式の 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());
}
?>
ソケットを使用した 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());
}
?>
シングルトンを使用した接続
<?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();
// ...
}
}
?>