PHP データベースPostgreSQLを扱う
Linux(CentOS5)にデータベースPostgreSQLをインストールして、PHP側から操作できるようにしたときのメモです。
PHPからPostgreSQLを操作するための準備
モジュール「pgsql.so」を組み込む
「pgsql.so」をインストールする
# yum install php-pgsql
「pgsql.so」の場所を確認する
# find / -name pgsql.so
/usr/lib/php/modules/pgsql.so
php.iniにモジュール「pgsql.so」を設定する
# vi /etc/php.ini ;パス extension_dir="/usr/lib/php/modules" ↓追加する extension=pgsql.so
もしパスの場所が違うなら、php.iniで設定してあるパスへ「pgsql.so」を移動する。
PostgreSQLへ接続するときの認証の方法を設定する
暗号化無しパスワード認証で接続出来るようにする場合、"local all all ident sameuser"を"local all all password"に変更する。
# su - postgres $ vi /var/lib/pgsql/data/pg_hba.conf ↓編集する # "local" is for Unix domain socket connections only #local all all ident sameuser local all all password
無条件で接続を許可する場合は、"local all all trust"とする。
PostgreSQLに接続
テスト用のテーブルを作成する
会員ID(customer_id)、会員名(customers_name)、入会日(entry_date)のフィールドを持ち、会員IDを主キーとするcustomersテーブルを作成する。
create table customers ( customers_id integer, customers_name varchar(64) not null, entry_date timestamp DEFAULT now() not null, primary key(customers_id) );
作成したテーブルに3件のテスト用データを挿入する。
insert into customers values ('1','yamada',now()); insert into customers values ('2','sato',now()); insert into customers values ('3','suzuki',now());
データを確認する。
testdb => select * from customers;
customers_id | customers_name | entry_date |
---|---|---|
1 | yamada | 2009-02-20 16:33:08.339802 |
2 | sato | 2009-02-21 16:33:08.346658 |
3 | suzuki | 2009-02-22 16:33:08.350654 |
PHPからPostgreSQLに接続する
<?php //データベース設定 define("DB_HOST", "localhost"); define("DB_PORT", "5432"); define("DB_DBNAME", "testdb"); define("DB_USER", "dbuser"); define("DB_PASSWORD", "dbpass"); //データベース接続情報 define("DB_CONNECT", "host=" . DB_HOST . " port=" . DB_PORT . " dbname=" . DB_DBNAME . " user=" . DB_USER . " password=" . DB_PASSWORD); //データベースに接続 $con = pg_connect(DB_CONNECT) or die('pg_connect is error'); //データベースを閉じる pg_close($con); ?>
PostgreSQLからデータを取得
pg_fetch_array関数を使ってデータを取得する
<?php //データベースへ接続 $con = pg_connect(DB_CONNECT) or die('pg_connect is error'); //SQL実行 $sql = "select * from customers"; $rs = pg_query($con, $sql) or die('pg_query is error'); //データ取得 while ($row = pg_fetch_array($rs)) { foreach($row as $key => $value) { echo "row['" . $key . "']=" . $value . "<br />"; } } //データベースを閉じる pg_close($con); ?>
「出力結果」
row['0']=1
row['customers_id']=1
row['1']=yamada
row['customers_name']=yamada
row['2']=2009-02-20 16:33:08.339802
row['entry_date']=2009-02-20 16:33:08.339802
row['0']=2
row['customers_id']=2
row['1']=sato
row['customers_name']=sato
row['2']=2009-02-21 16:33:08.346658
row['entry_date']=2009-02-21 16:33:08.346658
row['0']=3
row['customers_id']=3
row['1']=suzuki
row['customers_name']=suzuki
row['2']=2009-02-22 16:33:08.350654
row['entry_date']=2009-02-22 16:33:08.350654
pg_fetch_array関数を使うと、数値添字の配列と連想配列の両方でデータを返す。
pg_fetch_row関数を使ってデータを取得する。
データ取得の処理以外は上記のスクリプトと一緒なので省略。
<?php //データ取得 while ($row = pg_fetch_row($rs)) { foreach($row as $key => $value) { echo "row['" . $key . "']=" . $value . "<br />"; } } ?>
「出力結果」
row['0']=1
row['1']=yamada
row['2']=2009-02-20 16:33:08.339802
row['0']=2
row['1']=sato
row['2']=2009-02-21 16:33:08.346658
row['0']=3
row['1']=suzuki
row['2']=2009-02-22 16:33:08.350654
pg_fetch_row関数を使うと、数値添字の配列としてデータを返す。
pg_fetch_array($rs, NULL, PGSQL_NUM)としても同じ処理になる。
pg_fetch_assoc関数を使ってPostgreSQLからデータを取得する
データ取得の処理以外は上記のスクリプトと一緒なので省略。
<?php //データ取得 while ($row = pg_fetch_assoc($rs)) { foreach($row as $key => $value) { echo "row['" . $key . "']=" . $value . "<br />"; } } ?>
「出力結果」
row['customers_id']=1
row['customers_name']=yamada
row['entry_date']=2009-02-20 16:33:08.339802
row['customers_id']=2
row['customers_name']=sato
row['entry_date']=2009-02-21 16:33:08.346658
row['customers_id']=3
row['customers_name']=suzuki
row['entry_date']=2009-02-22 16:33:08.350654
pg_fetch_assoc関数を使うと、連想配列としてデータを返す。
pg_fetch_array($rs, NULL, PGSQL_ASSOC)としても同じ処理になる。
PostgreSQLから行やフィールドを指定してデータを取得
PostgreSQLから取得したデータの行数を取得する
<?php $con = pg_connect(DB_CONNECT) or die('pg_connect is error'); $sql = "select * from customers"; $rs = pg_query($con, $sql) or die('pg_query is error'); //データの行数を取得 $row_sum = pg_num_rows($rs); echo 'row_sum=' . $row_sum . '<br />'; pg_close($con); ?>
「出力結果」
row_sum=3
PostgreSQLから取得したデータのフィールド情報を取得する
<?php $con = pg_connect(DB_CONNECT) or die('pg_connect is error'); $sql = "select * from customers"; $rs = pg_query($con, $sql) or die('pg_query is error'); //フィールド数を取得 $field_sum = pg_num_fields($rs); echo 'field_sum=' . $field_sum . '<br />'; //フィールド名を取得 for ($i=0; $i<$field_sum; $i++) { echo pg_field_name($rs, $i) . ', '; } echo '<br />'; pg_close($con); ?>
「出力結果」
field_sum=3
customers_id, customers_name, entry_date,
PostgreSQLから行とフィールド位置を指定してデータを取得する
<?php $con = pg_connect(DB_CONNECT) or die('pg_connect is error'); $sql = "select * from customers"; $rs = pg_query($con, $sql) or die('pg_query is error'); //行数とフィールド数を取得 $row_sum = pg_num_rows($rs); $field_sum = pg_num_fields($rs); //最初の行の最初のフィールドのデータを取得 echo pg_fetch_result($rs, 0, 0) . '<br />'; //最後の行の最後のフィールドのデータを取得 echo pg_fetch_result($rs, $row_sum-1, $field_sum-1) . '<br />'; pg_close($con); ?>
「出力結果」
1
2009-02-22 16:33:08.350654
行番号とフィールド番号は0から始まる。
- 作者: PostgreSQL Global Development Group,日本PostgreSQLユーザー会
- 出版社/メーカー: インプレス
- 発売日: 2005/04/29
- メディア: 単行本
- 購入: 1人 クリック: 5回
- この商品を含むブログ (6件) を見る