概要
PHP から DB を触るには PDO (PHP Data Objects) という標準ライブラリを使う。PDO は SQLite / MySQL / PostgreSQL を 同じインターフェース で扱えるよう抽象化されていて、後から DB を切り替えても呼び出しコードはほぼ無修正で済む。実務でもまず PDO を覚えれば困らない。
接続時に渡す DSN (Data Source Name) は「どの種類の DB の・どこに繋ぐか」を表す文字列で、sqlite:/path/to.db / mysql:host=localhost;dbname=app;charset=utf8mb4 / pgsql:host=localhost;dbname=app のように DB 種類ごとに記法が違う。先頭の sqlite: / mysql: / pgsql: が DB の種類を切り替えるスイッチになる。
接続したら必ず setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) を呼ぶこと。これを設定しないと DB エラーが 静かに無視 される。設定しておけば SQL の失敗が即 PDOException として飛んでくるので、exception トピックで学んだ try / catch で扱える。
学習目標
- PDO で DB に接続するコードを書ける
- DSN (Data Source Name) が「どの DB のどこに繋ぐか」を表す文字列だと理解する
- SQLite / MySQL / PostgreSQL の DSN を読み分けられる
PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTIONを設定する習慣を付ける
ドリル
| no | 内容 |
|---|---|
| 01 | SQLite に接続して「接続成功」と出力 |
| 02 | 接続中のドライバ名を取り出して出力 |
採点用 DB について
このチャプター以降、ドリルの採点ランナーは tests/setup.sql を一時 SQLite に流し込んで、そのファイルパスを環境変数 DOJO_DB_PATH で渡してきます。受講生コードは次の形で接続してください。
$pdo = new PDO('sqlite:' . getenv('DOJO_DB_PATH'));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);📝 演習: ドリル 01 — SQLite に接続して「接続成功」と出力
問題
環境変数 DOJO_DB_PATH に渡されている SQLite ファイルに PDO で接続し、ちょうど次の 1 行を出力してください。
期待される出力:
接続成功ヒント
- DSN は
'sqlite:' . getenv('DOJO_DB_PATH') - 接続が失敗すると例外が飛ぶように、
PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTIONを設定する - 接続できたら
echo "接続成功\n";
📝 演習: ドリル 02 — 接続中のドライバ名を出力
問題
PDO で SQLite に接続し、PDO::ATTR_DRIVER_NAME 属性を取り出して、接続中のドライバ名 (今回は sqlite) をちょうど 1 行で出力してください。
期待される出力:
sqliteヒント
- 接続後に
$pdo->getAttribute(PDO::ATTR_DRIVER_NAME)を呼ぶ - 返ってきた文字列を
echoする (末尾に\nを忘れずに) - DSN を
mysql:...にすればこれがmysqlになる、というのが PDO の良いところ