PHPプログラミング

最終更新日:
公開日:

レシピ

データベース PostgreSQL

PostgreSQLデータベースへ接続する

PostgreSQLサーバーへの基本的な接続方法について、「PostgreSQL関数」と「PDO」の2通りのパターンを解説します。

この記事のポイント

  • PHPからPostgreSQLデータベースへの接続方法を確認する
  • PostgreSQL関数を使ってデータベースへ接続する
  • PDOを使ってデータベースへ接続する

目次

PostgreSQLデータベースへの接続方法

PHPからPostgreSQLデータベースへ接続し、各種操作を行う方法は大きく分けて2つあります。
1つ目はPHPのlibpqライブラリから提供されるPostgreSQL関数を使用する方法。
2つ目はPDO(PHP Data Objects)を使用する方法です。

どちらの方法を使うかの判断は機能的な比較というよりも、サーバー環境やプログラマーの裁量によります。
分かりやすい例としては、PDOを使って他のデータベース(MySQLやSQLiteなど)を操作するコードを記述したことがある場合は、PostgreSQLもPDOで扱う方がスムーズでしょう。

一方で、他のプログラミング言語(PythonやRubyなど)で関数を使っての操作コードを書いた経験がある場合は、PHPについてlibpqライブラリの関数を使う形で書いた方が感覚として分かりやすいはずです。

それぞれの接続方法を確認していきましょう。

PostgreSQL関数で接続する

こちらの方法は関数を呼び出して各種操作を行います。
データベースへの接続から切断、テーブルの操作、データの取得・更新・登録・削除などのクエリ実行も全て関数です。
よく使うものをいくつかピックアップしてみます。

関数名内容
pg_connectデータベースと接続する
pg_closeデータベースとの接続を切断する
pg_host接続したデータベースのホストを取得する
pg_query任意のSQLクエリを実行する
pg_select指定した条件のデータ(行)を取得する
pg_insertデータ(行)を新しく登録する
pg_update該当するデータ(行)を更新する
pg_delete該当するデータ(行)を削除する
pg_fetch_result取得したデータ(行)の結果を取得する
pg_fetch_all取得した全データ(行)を配列形式で取得する
pg_fetch_object取得したデータ(行)をオブジェクト形式で取得する

用意された全ての関数を確認したい場合はphp.netを参照してください。
PostgreSQL関数 – php.net

実際にデータベースへ接続するコードを書いていきましょう。
PostgreSQLデータベースへの接続、接続結果を確認、最後に接続解除するところまでをコードにすると次のようになります。

PostgreSQLデータベースに接続するコード例

// 各種パラメータを指定して接続
$pg_conn = pg_connect("host=localhost port=5432 dbname=test user=testuser password=testtest");

if( $pg_conn ) {
	var_dump("接続に成功しました");
} else {
	var_dump("接続できませんでした");
}

// データベースとの接続を切断
pg_close($pg_conn);

実行結果(接続に成功した場合)

string '接続に成功しました' (length=27)

最初に、pg_connect関数を使ってデータベースへ接続しています。
指定しているパラメータは次の5つを「半角スペース」で区切って指定します。

関数名内容
hostデータベースサーバーのホスト名
portデータベースサーバーのポート番号
dbname接続したいデータベース名
userユーザー名
password上記ユーザー名のパスワード

接続に成功すると接続リソースを、失敗した場合はfalseが返され、$pg_connに格納されます。

続くif文では$pg_connに入っている接続結果を確認し、もし接続リソースが入っていたら接続成功メッセージを出力し、falseの場合には失敗メッセージを出力しています。

最後にpg_close関数でデータベースとの接続を解除して終了です。
以上が、PostgreSQL関数を使った基本的な接続方法です。

PDOで接続する

PDOでは、最初にPDOオブジェクトを作成してデータベースとの接続を行います。その後、そのオブジェクトのメソッドを使って各種データベースの操作を実行します。

PDOはPostgreSQLだけではなく、MySQLやSQLiteなど他のデータベースにも同じ手順で接続、操作を行うことができ非常に使い勝手が良いです。
データベースタイプなど若干の修正で、SQLといったソースコードの使い回しが可能になります。
(PDOについてより詳しくはこちらの記事をご覧ください)

それでは実際に、PostgreSQLへ接続するコードを書いていきましょう。

データベースに接続するコード例

try {
	// 各種パラメータを指定して接続
	$pdo_conn = new PDO( 'pgsql:host=localhost; dbname=test;', 'testuser', 'testtest' );	
	var_dump("接続に成功しました");

} catch(PDOException $e) {
	var_dump($e->getMessage());
}

// データベースとの接続を切断
$pdo_conn = null;

実行結果(接続に失敗した場合)

string 'SQLSTATE[08006][7] FATAL: database "test" does not exist' (length=57)

接続に成功した場合は、先述のPostgreSQL関数と同じ結果になります。

最初に、new PDOで必要なパラメータを渡しながらPDOオブジェクトを作成し、$pdo_connへオブジェクトを格納します。オブジェクトを作成するタイミングで接続が行われています。パラメータは3つに分けて指定します。

pgsql:host=localhost; dbname=test;」では3つの設定情報を指定しています。
1つは「pgsql」でPostgreSQLであることを指定し、2つ目はホスト名、3つ目はデータベース名です。
今回は仮にホスト名を「localhost」、データベース名を「test」としています。

2つ目、3つ目のパラメータ「testuser」「testtest」はそれぞれユーザー名とパスワードです。
ご使用の環境に応じて指定してください。

今回は接続部分をtry文で囲っていますが、もしデータベースへの接続に失敗した場合には例外処理が実行されるようになっています。
具体的にはPDOExceptionオブジェクトの例外が投げられるので、それを$eへ格納し、その内容をgetMessageメソッドで取得します。

最後に、PDOオブジェクトが入っている$pdo_connを空(null)にすることで接続を解除して終了しています。
以上が、PDOを使ったPostgreSQLへの基本的な接続方法です。

PDOについてより詳しくは、php.netの下記ページを参照してください。
PDO – php.net

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。