PDOクラスコンストラクタとDSNの記述
まずPDOを使ってデータベースへ接続してみます。PDOにおいてはデータベースへの接続とは、PDOクラスのオブジェクトを作成することで行います。
PDOクラスのコンストラクタは下記のようになっています。
PDO PDO::__construct ( string dsn [, string username [, string password [, array driver_options]]] )
指定されたデータベースへの接続を表す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 )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。