データベース接続PDO

PHP+MySQLなどwebアプリケーションにはデータベースは必須だったりします。
さまざまなDBがありますが、ここでは主にMySQLを基本に説明していきます。
ですが、データベースといっても多くの種類があります。
毎回、mysql_connectなどMySQL関数を記述していたのでは変更の度に
我々プログラマそれぞれのDBにあわせて仕様変更するのは大変です。

そこで問題を解決するためにここではデータベース抽象化レイヤを使いながら接続していきます。
データベース抽象レイヤはそれぞれ製品の違うデータベースに対して
   違いを補ってくれるものです。
代表的なデータベース抽象レイヤを上げてみます。

ライブラリ名 メリット デメリット
PEAR::DB 普及率が高い 開発中止
PEAR::MDB/MDB2 多くのDB対応 スキーマを抽象化 処理が遅い
PEAR::DB_Objects 多くのDB対応 O/Rマッピング 処理が遅い
PDO シンプル・処理は速い 対応DB少ない・機能が弱い
Zend_Db 処理が早い・機能が豊富 対応DBがやや少ない
dbx 多くのDBに対応 機能がやや少ない
色々ありますが、ここではPDO(PHP Data Objects )を使う事にします。
使うに関してドライバを入れ込めば他のDBに対して使う事ができます。 
使う前には事前にphpinfoで使えるか確認しましょう
早速接続してます。
$dsn = 'mysql:dbname=selfphp; host=127.0.0.1';
$usr    = 'usr';
$passwd = 'password';

  try {
    $db = new PDO($dsn, $usr, $passwd);
    print '接続に成功しました。';
    $db = NULL;
  } catch (PDOException $e) {
    die("接続エラー:{$e->getMessage()}");
  }
  
構文として、
new PDO ( データベース接続文字,(ユーザ,パスワード)
とります。ですので、 $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);でも。
接続文字で、SQLiteやらポスグレにも対応します。

try~catchをつけたのは、仮に例外エラーが発生して(仮にトレースが表示された場合。 このバックトレースを見れば、データベースへの接続の詳細がわかってしまいます。) その中にはユーザ名やパスワードも含まれます。 (catch 文を使用して) 明示的に例外をキャッチするか、 あるいは set_exception_handler() を使用して 暗黙的に例外をキャッチするようにしましょう。
:参照 http://www.php.net/manual/ja/pdo.connections.php

次に外部化して使ってみましょう。
理由は毎回スクリプトに書くと大変ですし、
先頭に読み込んでおけば楽でメンテナンスがしやすいからです。

function getDb() {
 $dsn = 'mysql:dbname=selfphp; host=127.0.0.1';
 $usr = 'selfusr';
 $passwd = 'selfpass';
 try {
  $db = new PDO($dsn, $usr, $passwd);
  $db->setAttribute(PDO::ATTR_ERRMODE,
      PDO::ERRMODE_EXCEPTION);
  $db->exec('SET NAMES utf8');
 } catch (PDOException $e) {
  die("接続エラー:{$e->getMessage()}");
 }
return $db;
}
  
これで、DB接続を行うページの先頭で、
require_once '../DbManager.php';
$db = getDb();
と書けば使えます。
ここでおさらいします。
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オブジェクトを返します。
次に明示的に接続を閉じる場合も確認しましょう。
上記の場合、単にNULLを入れればおkです。
$dsn = 'mysql:dbname=selfphp; host=127.0.0.1';
$usr    = 'usr';
$passwd = 'password';

  try {
    $db = new PDO($dsn, $usr, $passwd);
    print '接続に成功しました。';
    $db = NULL;
  } catch (PDOException $e) {
    die("接続エラー:{$e->getMessage()}");
  }
  $db = null;
  
//この記事は編集中です。