数週間後(?)の自分に向けてのメモ(?)
基本形
公式ドキュメント「PHP: PDO::__construct」にある方法。
<?php /* ドライバ呼び出しを使用して MySQL データベースに接続する */ $dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
基本形+UTF8トラブル対策
アレンジして、DSNに文字エンコーディング指定を加える。
<?php /* ドライバ呼び出しを使用して MySQL データベースに接続する */ $dsn = 'mysql:dbname=testdb;host=127.0.0.1;charset=utf8'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
基本形+UTF8トラブル対策+エラートラップ強化
さらにアレンジして、DB接続時以降の処理でエラー派生した時にも例外処理できるように強化する。
公式ドキュメントにある方法「PHP: エラーおよびエラー処理」を参考に。
<?php /* ドライバ呼び出しを使用して MySQL データベースに接続する */ $dsn = 'mysql:dbname=testdb;host=127.0.0.1;charset=utf8'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // エラー発生時に例外スロー } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
基本形+UTF8トラブル対策+エラートラップ強化(別な書き方)
もしくは、接続時にもう設定してしまう方法。 これは知らなかったなぁ。
<?php /* ドライバ呼び出しを使用して MySQL データベースに接続する */ $dsn = 'mysql:dbname=testdb;host=127.0.0.1;charset=utf8'; $user = 'dbuser'; $password = 'dbpass'; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // エラー発生時に例外スロー ); try { $dbh = new PDO($dsn, $user, $password, $options); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
あわせて読みたい
PHP: 文字セットでは、PHPからMySQLに接続する際の文字セットにまつわる話がまとまっています。
PDOを使うか、mysqliを使うかで、やり方も変わってくるそうで。