PostgreSQLとの連携

 PHPは、PostgreSQL等のデータベースとの親和性がとても良い事で知られています。ここでは、PHPのPostgreSQL関連の関数について少しご説明しましょう。

サンプルプログラム

 下のサンプルプログラムは、PostrgeSQLで作ったデータベースに接続し、その内容を操作する為のものです。PostgreSQL自体の操作については、KOMONETサイトの「サーバユーザー・サポート」のコーナーに基本的な説明があります。どうぞご参考になさって下さい。

 尚、ここで使用しているデータテーブル作成のSQL文は以下の通りです。プライマリーキーに「id」を指定していますので、「id」の値に重複は許されません。

create table mytbl(id int2, name varchar(20), score int4, primary key (id));

<html>
<body>
<title>PostgreSQL実験</title>
<div align="center">
<table border=1>
<caption>検索結果</caption>
<tr><td>ID</td><td>氏名</td><td>点数</td></tr>
HTML出力部分
<?php PHP開始の合図
$d_base = pg_connect("user=*** password=*** dbname=mydb"); データベースに接続
if($action == post && $sign == '書き込み'){
 if($id && $name && $score){
  pg_exec($d_base, "insert into mytbl values('$id','$name','$score')");
 }
}
データの新規登録処理。INSERT文を使用。
if($action == post && $sign == '点数修正'){
 if($id && $score){
  pg_exec($d_base, "update mytbl set score=$score where id=$id");
 }
}
既存データの修正処理。UPDATE文を使用。
if($action == post && $sign == '一行削除'){
 if($id){
  pg_exec($d_base, "delete from mytbl where id=$id");
 }
}
既存データの削除処理。DELETE文を使用。
if($result = pg_exec($d_base, "select * from mytbl")){
 $row = pg_numrows($result); //検索結果の行数を取得
 for($i = 0; $i < $row; $i++){
  $arr = pg_fetch_row($result, $i); //検索結果の一行分を配列に格納
  echo "<tr>";
  for($j = 0; $j < count($arr); $j++){ //配列の要素を出力
  echo "<td>$arr[$j]</td>";
  }
  echo "</tr>";
 }
}
データベースの登録データがあれば、表組みに一覧表示します。
?> PHP終了の合図
</table>
<P>データベースの内容を操作できますよ(^o^)丿</P>
<P><FORM ACTION=<?php echo $PHP_SELF; ?> METHOD=POST>
<INPUT TYPE=HIDDEN NAME=action VALUE=post>
ID:<INPUT TYPE=TEXT NAME=id SIZE=5>
氏名:<INPUT TYPE=TEXT NAME=name SIZE=15>
点数:<INPUT TYPE=TEXT NAME=score SIZE=5>
<INPUT TYPE=SUBMIT NAME=sign VALUE="書き込み">
 <INPUT TYPE=SUBMIT NAME=sign VALUE="点数修正">
 <INPUT TYPE=SUBMIT NAME=sign VALUE="一行削除">
</FORM></P>
<P><FONT COLOR='red'>*「点数修正」と「一行削除」の場合はID指定のみでO.K.です。</FONT></P>
</div>
</body>
</html>
HTML出力部分

ここにデータ操作の為のフォームを設けています。

データベースへの接続

 PostgreSQLのデータベースに接続するには、pg_connect( )関数を使います。詳細は以下の通りです。

書式

int pg_connect ( string conn_string )

用法

 コネクションを開きます。成功すると接続インデックスを渡し、コネクションが生成できなかった場合はfalseを返します。引数は引用符で括った文字列とする必要があります。指定できる引数には、dbname、port、host、tty、options、user、passwordがあります。この関数は、他のPostgreSQL関数を発行する際に必要なIDを返します。一度に複数のコネクションをオープンする事ができます。

 hostについては、このPHPプログラムが設置されている場所が、PostgreSQLが稼動しているサーバーと同じならば「localhost」となります。もし違う場合は、サーバー名を指定して下さい。userpassworddbnameについては、PostgreSQL側で作成したデータベースのものを指します。

データベースの内容の取得

 データベースへの接続が成功したら、次にその内容を取得しなければなりません。この場合は、pg_exec( )関数にSQL文を使って実行します。詳細は以下の通りです。

書式

int pg_exec ( int connection, string query )

用法

 引数query で渡されたクエリーを実行します。クエリーに失敗したり、connection が有効な接続IDでない場合はfalseを返します。引数connection が有効な値であれば、pg_errormessage( )関数によりエラーの詳細を得る事が出来ます。この関数の返り値はインデックス値であり、その他のPostgreSQL関数から結果をアクセスする際に使われます。

 ここで使っているSQL文「select * from mytbl」は、データテーブルmytblからその内容を全て「*」セレクトしています。

行数の取得

 取得したデータベースの内容の行数を、pg_numrows( )関数を使って取得します。詳細は以下の通りです。

書式

int pg_numrows ( int result_id )

用法

 引数result_id で指定されたPostgreSQLの結果IDにおける行数を返します。引数は、pg_exec( )で返された有効な結果IDです。この関数は、エラーの際に-1を返します。

行を配列として取得

 取得したデータベースの各行の内容を、pg_fetch_row( )関数を使って配列として取得します。詳細は以下の通りです。

書式

array pg_fetch_row ( int result, int row )

用法

 数字をインデックスとする配列として行を取得します。行がもうない場合にfalseを返します。

 PHPとPostgreSQLの組み合わせで、色々なシステムを組む事が出来ます。掲示板のログファイルの代用も出来ますし、ショッピングカートで商品管理も一緒に行えるようなスクリプトを開発する事も出来ます。中古車販売や不動産販売などのデータベースに使うと、その機能を十二分に発揮してくれる事でしょう(^o^)丿

 

HOME

次へ 主なpg関数