[PHP-users 21183]Re: pgsqlconnectエラー

KOYAMA Tetsuji koyama @ hoge.org
2004年 4月 8日 (木) 13:15:00 JST


  小山です。

At Thu, 08 Apr 2004 12:40:09 +0900 (JST),
Tatsuo Ishii wrote:
> >   まぁ、DSN はいろいろな要求を受け入れた結果文法が肥大しているのは確か
> > ですねぇ。
> > 
> >   DB::connect() に渡す DSN は文字列だけではなく、連想配列も可能なので
> > 
> > 	$dsn = array(
> > 		'phptype' => 'pgsql',
> > 		'dbsyntax' => 'pgsql',
> > 		'username' => 'www',
> > 		'protocol' => 'unix',
> > 		'database' => 'test_db',
> > 	);
> > 
> > なんて書くと、DB::parseDSN() の妙ちくりんな解釈に悩まされずにすみま
> > す。:-)
> 
> おお,なるほど.
> 
> ただ,これでポート番号はどうやって指定するのでしょう?

  上記の例では protocol が unix なのでポート番号を指定する必要はありま
せんよね。

  汎用的な話ならば、DB::parseDSN() の先頭に以下のように書かれています
ので、これの自分で必要な部分を埋めた配列を作ればよいです。

        $parsed = array(
            'phptype'  => false,
            'dbsyntax' => false,
            'username' => false,
            'password' => false,
            'protocol' => false,
            'hostspec' => false,
            'port'     => false,
            'socket'   => false,
            'database' => false,
        );

  DB::parseDSN() の役目は、DSN 文字列を解析して上記連想配列に値を格納
することです。最初から配列を渡してやれば、解析処理が省かれるし、思うよ
うに値がセットされて悩むこともないです。

-- 
	小山 哲志@ビート・クラフト
	koyama @ beatcraft.com
	koyama @ hoge.org


PHP-users メーリングリストの案内