このエントリーをはてなブックマークに追加


PHPのpg_connect関数を使用してPostgreSQLに接続する

PHPのpg_connect関数を使用してPostgreSQLに接続するサンプルコードを以下に記します。
使用したOSはCentOS6, PostgreSQLのバージョンは8.4.13になります。

関連資料

以下の2つの資料はLINUX.JUST4FUN.BIZで公開している資料です。

pg_connectの接続文字列

pg_connectの接続文字列は以下のように複数指定する方法があります。
これは、PostgreSQLの設定ファイルpg_hba.confにより必要な項目が異なってきます。

データベースのみ指定

$conn = pg_connect("dbname=foo");

この場合は、pg_hba.confの設定が以下のようになっていると思います。

<snip>
# "local" is for Unix domain socket connections only
local   all         all                               trust
<snip>

PHPスクリプトを起動するユーザがPostgreSQLに登録されていれば上記の接続文字列だけで接続されます。

ホストとデータベースを指定

$conn = pg_connect("host=localhost dbname=foo");

この場合は、pg_hba.confの設定が以下のようになっていると思います。
(CIDR-ADDRESSの文字列は環境によってIPの範囲指定をする必要があります。)

# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust

PHPスクリプトを起動するユーザがPostgreSQLに登録されていれば上記の接続文字列だけで接続されます。
またユーザを指定する場合は、以下のようになります。(trustになっているのでパスワードは不要)

$conn = pg_connect("host=localhost dbname=foo user=bar");

ホスト、ユーザ、パスワードを指定する

$conn = pg_connect("host=127.0.0.1 dbname=foo user=bar password=hoge");

この場合は、pg_hba.confの設定が以下のようになっていると思います。
(CIDR-ADDRESSの文字列は環境によってIPの範囲指定をする必要があります。)

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5

とか

# IPv4 local connections:
host    all         all         127.0.0.1/32          password

ポートを指定したい場合

通常ポートの5432ではなく、他のポートに変更した場合は以下のようにportを追記します。
(port=5432と明示的に記述しても大丈夫です。)

$conn = pg_connect("host=127.0.0.1 port=12345 dbname=foo user=bar password=hoge");

オプションを追加したい場合

optionsに追加したいオプション文字列を記述します。
例(クライアントエンコード文字コードをUTF8にする。)

$dbconn = pg_connect("host=127.0.0.1 options='--client_encoding=UTF8'");

PostgreSQLに接続するPHPサンプルコード

以下のサンプルコードは、PostgreSQLに接続しSELECT now();を実行して終了する単純なサンプルソースです。
PostgreSQLの接続文字列に関しては、上記のようにpg_hba.confの設定により変化します。
サンプルスクリプトを試そうと思っている方は、接続文字列を変更しスクリプトを実行してみてください。

PostgreSQLへの接続にはユーザID、パスワードを必要とする設定になっているとしたサンプルコードとなっています。
また、本スクリプトはコマンドラインから実行しました。

  • サンプルコード
    <?php
      if( !$conn = pg_connect("host=127.0.0.1 port=5432 dbname=postgres user=foo password=foo")) {
        print ("Connection failed.\n");
        exit;
      }
      $sql = "SELECT now();";
      if ( !$result = pg_query($sql)) {
        print ("Failed : $sql\n");
        exit;
      }
      $row = pg_fetch_array($result);
      print $row[0] ."\n";
      if (!pg_close($conn)) {
        print ("disconnect failed\n");
        exit;
      }
    ?>
  • 実行結果 上記のpg_connectのサンプルコードを実行したときの出力です。
    $ php pg_connect.php 
    2012-10-03 16:16:15.269531+09

添付ファイル: filepg_connect.php.zip 637件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:08:00