PDOとは
「PHP Data Objects」の略で、PHPから簡単にDBにアクセスするための拡張モジュールです。データベースの種類やバージョンの違いを気にせずコードを書くことができます。
データベースに接続
PDOオブジェクトのインスタンスを作成します。以下の例では、変数$pdoに代入しています。
$pdo = new PDO($dsn, $username, $password, $options);
4つの引数を渡していて、説明は以下の通りです。
- $dsn…データベースに接続するための必要な情報
dbname
はデータベース名を指定
host
はホスト名またはIPアドレスを指定
charset
は文字セットを指定
$dsn = 'mysql:dbname=test;host=localhost;charset=utf8mb4';
- $username…データベースに接続するためのユーザー名
ルート権限を使う場合、デフォルトはroot
です。
$username = 'root';
- $password…データベースに接続するためのパスワード
ルート権限を使う場合、デフォルトは空白です。以下はroot
としています。
$password = 'root';
- $options…PDOのオプション
接続時のオプションを連想配列で渡します。よく使われるオプションの一覧です。
$options = array(
// エラーの際、PDOExceptionの例外をスローしてくれる
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// SELECT文やWHERE句などの結果をカラム名をキーとする配列で返してくれる
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
// PDOのエミュレート機能を無効
PDO::ATTR_EMULATE_PREPARES => false,
);
上記の内容の場合の書き方をまとめてみます。例外処理を追加する必要があるので、エラーが発生した場合、try~catch
構文でPDOException
の例外をキャッチするようにします。
try {
$dsn = 'mysql:dbname=test;host=localhost;charset=utf8mb4';
$username = 'root';
$password = 'root';
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
);
$pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
// 例外発生時の処理を記述
}
データベースの接続解除
接続した時に作成したPDOオブジェクトのインスタンスを削除することで接続を解除できます。
$pdo = null;
終わりに
今回はPHPでMySQLに接続する方法を学習しまとめてみました。今後は、データベースから取得する方法も学んでいきたいと思います。
2/10追記
PDO::ATTR_EMULATE_PREPARES => false(エミュレーションモードのプリペアードステートメントを無効)にしていることで、SQLインジェクション対策に繋がります。