🍄

PHP × PostgreSQL:PDOを使ったDB接続処理の実装メモ

に公開

この記事では、素のPHPでPostgreSQLに接続するための設定ファイル config/database.php の役割と中身についてまとめています。

主な目的

このファイルは、PDO(PHP Data Objects) を用いて、PostgreSQLデータベースへの接続処理を行います。接続が成功すれば $pdo オブジェクトを返し、失敗すればエラーメッセージを返して処理を中断します。

コード解説

<?php
$host = 'db';
$dbname = 'myapp_development';
$user = 'postgres';
$password = 'password';

接続情報

  • $host:Docker Composeで定義されたサービス名 db を指定(PostgreSQLコンテナのホスト名)
  • $dbname:使用するデータベース名
    • 環境変数 POSTGRES_DB に明示的に定義されているため、データベース名はこの値で作成されます。
  • $user:PostgreSQLのユーザー名
  • $password:ユーザーのパスワード
try {
  $pdo = new PDO("pgsql:host=$host;dbname=$dbname", $user, $password);
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  return $pdo;
}

PDOオブジェクトの作成

  • new PDO(...):
    • PostgreSQL に接続するための「PDOオブジェクト(データベースとやり取りする道具)」を作っています。
    • "pgsql:host=...;dbname=..." という書き方は、どこにあるどのデータベースに接続するかを指定するものです(これを DSN: データソース名 と呼びます)。
    • $user と $password はログインに使うユーザー名とパスワードです。
  • $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
項目 説明
$pdo->setAttribute(...) PDO に設定を追加する命令。
PDO::ATTR_ERRMODE エラーが発生したとき、どのように振る舞うかを指定するためのオプション。「エラー・モードの属性(設定項目)」という意味です。
PDO::ERRMODE_EXCEPTION エラーが発生したときに、例外(エラーオブジェクト)を投げるようにする指定。これを設定しておくと、SQLのミスなどが起きたときにプログラムが止まって、どこで問題が起きたか明確になります。
catch (PDOException $e) {
  http_response_code(500);
  echo json_encode([
    'error' => 'DB接続に失敗しました。',
    'message' => $e->getMessage()
  ]);
  exit;
}

エラーハンドリング

  • DB接続に失敗した場合、HTTP 500エラーを返し、JSON形式でエラーメッセージを出力
  • exit; でそれ以降の処理を停止(安全なエラーハンドリング)

注意点と補足

  • このファイルは require または require_once で読み込まれ、戻り値 $pdo を使用する形式です。
  • DSNの指定方法が "pgsql:host=...;dbname=..." である点はMySQL等と異なるため注意。
  • 実運用では .env や設定ファイルから環境変数として値を読み込む設計も推奨されます。

使用例(呼び出し側)

$pdo = require __DIR__ . '/../config/database.php';

このようにして $pdo を取得し、SQL実行などで活用します。

まとめ

この database.php は、アプリケーションのあらゆるDB操作の「入口」となる重要な設定です。

Discussion