PHP

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の流れが超ラクになる!