PHPでPostgreSQLに接続する方法


はじめに

CentOS上のメールサーバが受信したメールをPHPで解析して、内容をPostgreSQLデータベースに書き込む処理を作成することとなったため、備忘録としてやったことを残す。

実行環境

  • CentOS 6.9
  • Apache Http Service 2.4
  • PHP 7.2.14
  • PostgreSQL 9.5

環境構築

上記実行環境の環境構築は今回省略する。

DB接続用ドライバのインストール

PHPからPostgreSQLデータベースへのアクセスを可能にするためのPHP Data Objects (PDO)をインストールする。

yum install --enablerepo=remi-php72 php-pdo php-pgsql

※別の接続方法として、pg_connectを使用する方法もあるらしいが、PHP初心者なので詳細な違いは不明。
 PDOを使用すると、DBの種類などを隠蔽でき、使用しているデータベースが何であるかにかかわらず、同じ関数を使用してクエリの発行やデータの取得が行えるとのこと。
参考:http://php.net/manual/ja/intro.pdo.php

サンプルコード

ドライバや設定、接続確認用のシンプルなサンプル。
(とあるテーブルの全レコードを取得して指定した列名を一覧表示するプログラム。)

<?php

$DBHOST = "x.x.x.x";
$DBPORT = "xxxxx";
$DBNAME = "x";
$DBUSER = "x";
$DBPASS = "x";

try{
  //DB接続
  $dbh = new PDO("pgsql:host=$DBHOST;port=$DBPORT;dbname=$DBNAME;user=$DBUSER;password=$DBPASS");
  print("接続成功".'<br>');

  //SQL作成
  $sql = 'select * from x';
  //SQL例
  //$sql = 'select * from "SchemeName"."TableName"';

  //SQL実行
  foreach ($dbh->query($sql) as $row) {
      //指定Columnを一覧表示
      print($row['ColumnName'].'<br>');
  }

}catch(PDOException $e){
  print("接続失敗".'<br>');
  print($e.'<br>');
  die();
}
//データベースへの接続を閉じる
$dbh = null;
?>

実行結果

ブラウザでPHPを表示した結果を以下に示す。
1行目に「接続成功」が出力され、2行目以降に取得したColumnNameの値が一覧表示される。

まとめ

PHPからPostgreSQLに接続してデータ取得するところまでを行った。

どこかでメールの解析等も残したいなぁ。