はじめに
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に接続してデータ取得するところまでを行った。
どこかでメールの解析等も残したいなぁ。