今回はPHPからPostgreSQLに接続してデータを取得するコードを書いてみます。DBについては既にインストールやアカウントの設定が終わっているものと仮定します。問題を簡単にするため文字コードについては考慮しませんが、DBからページに表示する際に文字コードを変換する関数も書いてみることにします。
$server = "localhost"; // 接続先のホスト
$dbname = "db_sample"; // データベース名
$user = "i_am_an_user"; // ユーザ名
$password = "passwd"; // パスワード
$conndef = "host=".$server." dbname=".$dbname." user=".$user." password=".$password; // 接続定義
$conn = pg_connect($conndef) or die("connection error"); // 接続
// SQLの実行(適当な例です)
$query = "SELECT * FROM mytable WHERE id <= 10";
$result = pg_query($conn, $query) or die("SQL error");
// 結果から各種情報を取得する
$nrow = pg_num_rows($result); // 行数(件数)の取得
$nfield = pg_num_fields($result); // 列数の取得
// 表示
for( $i = 0 ; $i < $nfield ; $i++ ){
echo pg_field_name($result, $i)." "; // タイトルの表示
}
echo "\n";
while ($row = pg_fetch_array($result)) { // 1要素ずつ取得する
for( $i = 0; $i < $nfield ; $i++ ){
// $row["id"]などとしてもデータを取得することができる。
// その場合はpg_fetch_array($result, $i, PGSQL_ASSOC)として1要素を取得することになる。
echo $row[$i]." "; // 順番に各内容を表示
}
echo "\n";
}
pg_close($conn); // DB操作が終わったら切断
// DBから取得した文字列に対して文字コードを変換するための関数
// DBの文字コード
$db_encode = "UTF-8";
// 表示の際に使う文字コード(文字コードはhtmlに指定されているはずである)
// もしかするとApacheなどWebサーバの方で強制的に指定されているかもしれないので
// そちらの設定も確認しておくこと。全部統一しておけば、とりあえず安心できるだろう。
$disp_encode = "UTF-8";
function convert_encoding($string, $from, $to){
$detected_encode = mb_detect_encoding($string, $from.", ".$to);
if( $detected_encode and $detected_encode != $to ){
return mb_convert_encoding($string, $to, $detected_encode);
}else{
return $string;
}
}
MySQLとPostgreSQLでは引数に与えるクエリと接続定義の順序が逆になっている点に注意。