接続

接続 – データベースへの接続および接続の解除

Description

データベースオブジェクトを作成するには、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 配列の要素 sslTRUE にしなければなりません。 配列 $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();
        
// ...
    
}
}
?>
データソース名 (Data Source Name) (Previous) クエリの実行 (Next)
Last updated: Fri, 31 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:

Note by: user@example.com
I use php5 and none of this seems to work.
Note by: Trung
When using a DSN of type array with the Oracle database, do not specify a 'database' and a 'service'.

Only specify a 'service' as providing both will result in a connection failure.
Note by: uwe.hausdorff@interone.de
I had to change some pear sources manually as the oracle parameters NLS_NUMERIC_CHARATERS and NLS_DATE_FORMAT are not editable by the configuration parameters.

The setting NLS_DATE_FORMAT is disabled by default, NLS_NUMERIC_CHARATERS are always set. This setting is not european standard and may override individual application settings!

see /MDB2/oci8.php in class MDB2_Driver_oci8, function _doConnect on line 395.
My file is version "oci8.php,v 1.192 2007/03/04 22:27:11 quipo Exp"

if (empty($this->dsn['disable_iso_date'])) {
$query = "ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'";
$err =& $this->_doQuery($query, true, $connection);
if (PEAR::isError($err)) {
$this->disconnect(false);
return $err;
}
}

$query = "ALTER SESSION SET NLS_NUMERIC_CHARACTERS='. '";
$err =& $this->_doQuery($query, true, $connection);
if (PEAR::isError($err)) {
$this->disconnect(false);
return $err;
}
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."
Note by: purej
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."