0

アクセスしたいPostgresデータベースがあります。DB に存在するいくつかの関数を呼び出す必要があります。データベースへの接続とクエリの実行を達成しました。必要な関数を呼び出すこともできました。私の問題は、Postgres 関数に複数の OUT パラメータがある場合、オフセットまたは行名でアクセスできる配列を返す代わりに、両方の OUT パラメータを含む文字列を返すことです。

$query = "Select pg_function('" . Getenv("REMOTE_ADDR") . "')";
$result = pg_query($query);
$line = pg_fetch_array($result, NULL, PGSQL_ASSOC);
var_dump($line);

var_dumb が返すものは次のとおりです。

array
    'ua_bl_session_request' => string '(c6787f5f2b2c885168162c8c8ffff220,8fe04393-c188-0e08-b710-a2ce89066768)' (length=71)

もちろん、その文字列を解析できますが、私が望むものを達成する方法はありますか?

4

2 に答える 2

1
SELECT * FROM pg_function(REMOTE_ADDR);
于 2012-07-09T06:25:27.307 に答える
1

2 番目のパラメータで行番号を指定する必要があるため、pg_fetch_array()を間違って使用している可能性があります。例えば:

// To get the first row (Rows are numbered from 0 upwards)
$line = pg_fetch_array($result, 0, PGSQL_ASSOC);

// To get the second row
$line = pg_fetch_array($result, 1, PGSQL_ASSOC);

しかし、自分が何をしているのかわかっている場合は、regexp_split_to_table()を使用できます。これは、区切り文字として POSIX 正規表現を使用して文字列を行に分割する Posgtres 文字列関数です。例えば:

$query  = "select regexp_split_to_table(
               pg_function('" . Getenv("REMOTE_ADDR") . "'), ','
           )";

あなたの場合、','区切り文字として使用して関数の結果を分割します。以下のように、2 行の結果セットが返されます。

c6787f5f2b2c885168162c8c8ffff220
8fe04393-c188-0e08-b710-a2ce89066768
于 2012-07-08T18:02:31.023 に答える