PostgreSQLへ接続

広告

PDOを利用してPostgreSQLへ接続してみます。

事前にPostgreSQLへ"uriage"と言う名前のデータベースを作成してあります。また"uriage"データベース内に"shouhin"テーブルを作成し、初期データを入れてあります。

PostgreSQLへPDOで接続

またこのデータベースへ接続してSQL文を発行するためのユーザーとして「pguser」というユーザーを作成しました(パスワードは「pguser」)。のユーザーに対する権限は下記のように「shouhin」テーブルに対して「SELECT」「UPDATE」「DELETE」「INSERT」の権限を与えています。

PostgreSQLへPDOで接続

"uriage"データベースへ接続するためのPDOクラスのオブジェクトの作成は下記のようになります。

$dsn = 'pgsql:dbname=uriage host=localhost port=5432';
$user = 'pguser';
$password = 'pguser';

try{
    $dbh = new PDO($dsn, $user, $password);
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}
サンプルコード

では実際に試してみます。下記ではデータベースへ接続後にテーブルの中身を表示させています(詳しくは別のページで確認します)。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

function convert_enc($str){
    $from_enc = 'EUC_JP';
    $to_enc = 'SJIS';

    return mb_convert_encoding($str, $to_enc, $from_enc);
}

$dsn = 'pgsql:dbname=uriage host=localhost port=5432';
$user = 'pguser';
$password = 'pguser';

try{
    $dbh = new PDO($dsn, $user, $password);

    print('接続に成功しました。<br>');

    $sql = 'select * from shouhin';
    foreach ($dbh->query($sql) as $row) {
        print(convert_enc($row['id']));
        print(convert_enc($row['name']).'<br>');
    }
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}


$dbh = null;

?>

</body>
</html>

※PDOを利用する場合に、pg_set_client_encoding()に相当する機能をどう実現すればいいか分からなかったので、データベースから返されてきた値をmb_convert_encoding関数を使って文字コードの変換を行っています。

上記ファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。

PostgreSQLへPDOで接続

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。