PDOクラスコンストラクタとDSNの記述

広告

まずPDOを使ってデータベースへ接続してみます。PDOにおいてはデータベースへの接続とは、PDOクラスのオブジェクトを作成することで行います。

PDOクラスのコンストラクタは下記のようになっています。

指定されたデータベースへの接続を表すPDOインスタンスを生成します。

引数:
  dsn データソース名(Data Source Name)またはDSN。データベースに接続
    するために 必要な情報が含まれます。
  username DSN文字列のユーザ名。このパラメータは、いくつかのPDOドラ
    イバではオプションです。
  password  パスワード。DSN文字列で必要とされる場合に指定。
  driver_options  ドライバ固有の接続オプションを指定するキー=> 値
    の配列。
戻り値:
  成功時にPDOオブジェクトを返します。

必須の引数であるデータソース名に、どのデータベースのどのホストのどのデータベースへ接続するのかを指定します。

MySQLのDSN

MySQLのデータソース名の構文は下記のようになります。

mysql:dbname=db_name;host=host_name;port=port_no

どれが必須なのかは分かりませんがポート番号は省略可能なようです。下記が記述例です。

mysql:dbname=test;host=localhost
mysql:dbname=test;host=localhost:port=3306

PostgreSQLのDSN

PostgreSQLのデータソース名の構文は下記のようになります。

pgsql:dbname=db_name;host=host_name;port=port_no;user=user_name;pass=password

PostgreSQLのDSNでは、DSNでユーザー名とパスワードが指定できるようです。PDOクラスのコンストラクタの2番目と3番目の引数でも指定できますので、どちらかで指定すればいいようです。(DSNで指定した場合は、コンストラクタの引数でユーザー名とパスワードを指定しても無視されるようです)。

記述例は下記のようになります。

pgsql:dbname=test;host=localhost;port=5432
pgsql:dbname=test;host=localhost;port=5432;user=hoge;pass=hoge

SQLiteのDSN

SQLite(SQLite 3)のデータソース名の構文は下記のようになります。

sqlite:db_name

SQLiteでディスク上のデータベースに接続するには絶対パスでデータベースの位置を指定します。

sqlite:d:¥¥sqlite¥¥test

また現在ではSQLite 2についても一部対応しているようです。その場合は下記のように接頭語を"sqlite2"と記述します。

sqlite2:d:¥¥sqlite¥¥test

PDOクラスのオブジェクトの作成

SQLiteにはユーザーという概念がありませんが、MySQLやPostgreSQLを利用する場合には、ユーザー名とパスワードをコンストラクタの2番目と3番目の引数に指定します。(PostgreSQLはDSN内にも記述可能です)。

実際にPDOクラスのオブジェクトの作成は下記のようになります。

$dsn = 'mysql:dbname=testdb;host=localhost';
$user = 'dbuser';
$password = 'dbpass';

$dbh = new PDO($dsn, $user, $password);

またPDOクラスはオブジェクトの作成時に、データベースへの接続に失敗した場合"PDOException"という例外を投げるようです。その為、try catchを使って例外処理を記述しておきます。

$dsn = 'mysql:dbname=testdb;host=localhost';
$user = 'dbuser';
$password = 'dbpass';

try{
    $dbh = new PDO($dsn, $user, $password);
}catch (PDOException $e){
    print('Connection failed:'.$e->getMessage());
    die();
}

データベースへの接続を閉じる

PHPスクリプトが終了すればデータベースへの接続は閉じられますが、明示的に閉じる場合には作成したPDOクラスのオブジェクトに"NULL"を代入します。

$dsn = 'mysql:dbname=testdb;host=localhost';
$user = 'dbuser';
$password = 'dbpass';

try{
    $dbh = new PDO($dsn, $user, $password);
}catch (PDOException $e){
    print('Connection failed:'.$e->getMessage());
    die();
}

$dbh = null;

( Written by Tatsuo Ikura )