#navi(../)
* PHPのpg_connect関数を使用してPostgreSQLに接続する [#ha33a09e]
PHPのpg_connect関数を使用してPostgreSQLに接続するサンプルコードを以下に記します。~
使用したOSはCentOS6, PostgreSQLのバージョンは8.4.13になります。

#contents
#htmlinsertpcsp(db-top.html,db-sp.html)

* 関連資料 [#m5197b75]
以下の2つの資料は[[LINUX.JUST4FUN.BIZ>http://linux.just4fun.biz]]で公開している資料です。
-[[UbuntuでLAPP環境を構築する>http://linux.just4fun.biz/Ubuntu/LAPP%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89.html]]
-[[CentOSでLAPP環境を構築する>http://linux.just4fun.biz/CentOS/CentOS%E3%81%A7LAPP%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89.html]]

- PHP: pg_connect - Manual~
http://php.net/manual/ja/function.pg-connect.php

* pg_connectの接続文字列 [#x07c055e]
pg_connectの接続文字列は以下のように複数指定する方法があります。~
これは、PostgreSQLの設定ファイルpg_hba.confにより必要な項目が異なってきます。
** データベースのみ指定 [#h6a0498f]
 $conn = pg_connect("dbname=foo");
この場合は、pg_hba.confの設定が以下のようになっていると思います。
 <snip>
 # "local" is for Unix domain socket connections only
 local   all         all                               trust
 <snip>
PHPスクリプトを起動するユーザがPostgreSQLに登録されていれば上記の接続文字列だけで接続されます。

** ホストとデータベースを指定 [#q7c0db91]
 $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");

** ホスト、ユーザ、パスワードを指定する [#v3d19ec4]
 $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

** ポートを指定したい場合 [#mf035cd8]
通常ポートの5432ではなく、他のポートに変更した場合は以下のようにportを追記します。~
(port=5432と明示的に記述しても大丈夫です。)
 $conn = pg_connect("host=127.0.0.1 port=12345 dbname=foo user=bar password=hoge");

** オプションを追加したい場合 [#hcece1ef]
optionsに追加したいオプション文字列を記述します。~
例(クライアントエンコード文字コードをUTF8にする。)
 $dbconn = pg_connect("host=127.0.0.1 options='--client_encoding=UTF8'");

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

PostgreSQLへの接続にはユーザID、パスワードを必要とする設定になっているとしたサンプルコードとなっています。~
また、本スクリプトはコマンドラインから実行しました。
- サンプルコード
#ref(pg_connect.php.zip)
 <?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

#htmlinsertpcsp(db-btm.html,db-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS