PostgreSQLへ接続

広告

それでは実際にPHPを使ってPostgreSQLへ接続してみます。「pg_connect」関数を使います。

resource pg_connect(string connection_string [, int connect_type])

pg_connect() は、connection_string で指定された情報を用いてデータベース
との接続をオープンします。同じ connection_string 引数で 2 回 pg_connect() 
関数がコールされた場合は、connect_type に PGSQL_CONNECT_FORCE_NEW を指定
していない限り既存の接続が返されます。

引数:
  connection_string  接続するデータベースやユーザー名などを指定する文字
    列。デフォルトの値以外に指定する部分を記述します。個々のパラメータは
    keyword = value の形式で 設定します。等号の前後の空白はあってもなく
    てもかまいません。 空の値や空白を含む値を指定する場合は、その値をシ
    ングルクォートで 囲みます。(例: keyword = 'a value')
    値の中に シングルクォートやバックスラッシュが含まれる場合は、それら
    を バックスラッシュでエスケープする必要があります(例: \' および \\)。

    現在利用できるパラメータは以下のとおりです。 host, hostaddr, port, 
    dbname, user, password, connect_timeout, options, tty(無視されます),
    sslmode, requiressl(非推奨。代わりに sslmode を推奨します)および 
    service 。これらのうち実際にどの パラメータが使えるかは、PostgreSQL 
    のバージョンに依存します。

  connect_type  PGSQL_CONNECT_FORCE_NEW が渡された場合は、たとえ 
    connection_string が既存の接続と まったく同一であっても新しい接続
    をオープンします。 
返り値:
  成功した場合にPostgreSQLの接続リソース、失敗した場合にFALSEを返します。

実際に指定する値としてはPostgreSQLのホスト名(host)やデータベース名(dbname)、そしてユーザー名(user)とパスワード(password)などかと思います。

$link = pg_connect("host=localhost dbname=db user=usr password=pass");

PostgreSQLからの切断

接続後、接続を切断するには「pg_close」関数を使います。

bool pg_close([resource connection])

connection リソースで指定した PostgreSQL データベースへの持続的でない接
続を閉じます。

引数:
  connection  PostgreSQL データベース接続リソース。connection が指定され
    ていない場合はデフォルトの接続が使用されます。デフォルトの接続は、直
    近の pg_connect() あるいは pg_pconnect() によって作成されたものです。
返り値:
  成功した場合に TRUE を、失敗した場合に FALSE を返します。

実際の使い方は下記のようになるかと思います。

$link = pg_connect("host=localhost dbname=db user=usr password=pass");

// PostgreSQLに対する処理

pg_close($link);

エラー処理

PostgreSQLに対する処理の過程で何かエラーが発生した場合「pg_last_error」関数でエラーメッセージを取得することができます。

string pg_last_error([resource connection])

pg_last_error() は、指定した connection から直近のエラーメッセージを返
します。

引数:
  connection  PostgreSQL データベース接続リソース。connection が指定され
    ていない場合はデフォルトの接続が使用されます。デフォルトの接続は、直
    近の pg_connect() あるいは pg_pconnect() によって作成されたものです。
返り値:
  指定した connection の直近のエラーメッセージを 含む文字列を返します。
    エラー時には FALSE を返します。

例えば「pg_connect」関数利用時にエラーが発生した場合、エラーメッセージを見るには下記のように記述します。

$link = pg_connect("host=localhost dbname=db user=usr password=pass");

if (!$link) {
    print(pg_last_error());
}

// PostgreSQLに対する処理

pg_close($link);

実際には接続に失敗した場合、その後のPostgreSQLに対する処理を実行出来ない為、「exit」関数又は「die」関数を用いてスクリプトを終了させます。

$link = pg_connect("host=localhost dbname=db user=usr password=pass");
if (!$link) {
    die('接続失敗です。'.pg_last_error());
}

// PostgreSQLに対する処理

pg_close($link);

※「exit」関数及び「die」関数については『スクリプトを終了する(exit, die)』を参照して下さい。

サンプルコード

では実際に試してみます。ユーザー名「pguser」パスワード「pguser」で「uriage」データベースへ接続を行います。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

$conn = "host=localhost dbname=uriage user=pguser password=pguser";
$link = pg_connect($conn);
if (!$link) {
    die('接続失敗です。'.pg_last_error());
}

print('接続に成功しました。<br>');

// PostgreSQLに対する処理

$close_flag = pg_close($link);

if ($close_flag){
    print('切断に成功しました。<br>');
}

?>
</body>
</html>

上記ファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。

PostgreSQLへの接続テスト

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。