SQLファイル外部化 & PDOでテーブル作成

🎯 やりたいこと
PHPから直接SQL文を書くのではなく、
.sql
ファイルを外部に分けて読み込んで実行したい!
理由:
- 見通しが良くなる
- SQLだけ使い回せる
- Gitで履歴管理しやすい
📜 sql/table_create.sql の中身(テーブル定義)
CREATE TABLE IF NOT EXISTS wp_task_items (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
deadline DATE,
is_done TINYINT(1) DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
🧠 inc/table_operations.php の中身(処理ファイル)
<?php
require_once 'db.php';
try {
// SQLファイルの読み込み(相対パス注意!)
$sql_path = __DIR__ . '/../sql/table_create.sql';
if (!file_exists($sql_path)) {
throw new Exception("SQLファイルが見つかりません: {$sql_path}");
}
$sql = file_get_contents($sql_path);
// PDOで実行
$pdo->exec($sql);
echo '🟢 テーブル作成成功';
} catch (Exception $e) {
echo '🔴 エラー: ' . $e->getMessage();
}
🧩 つまずきポイント
内容 | やらかし |
---|---|
file_get_contents() | 相対パスのズレで「ファイルが見つからない」警告発生 |
exec('') | 空文字でPDOが死ぬ → file_get_contents() 失敗が原因だった |
Win環境 | ディレクトリ区切りのバックスラッシュ・パス要注意 |
💡 学びポイント
__DIR__
+../
でパスを正確に制御すべしPDO::exec()
はSQL文が空だとエラーになる- SQLは別ファイルにして再利用できるようにしておくと便利
- トラブルが成長の糧になる🔥
🎉 結果
- Gitに管理しやすい構成完成
- ローカル環境で初期DBセットアップが一瞬で終わる
- 次回以降、DB設計→SQL→PHPの流れが超ラクになる!