0

我有一个想要访问的 Postgres 数据库。我需要调用数据库中存在的几个函数。我已经实现了与数据库的连接和运行查询。我也实现了调用我想要的功能。我的问题是,当 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

也许您错误地使用了 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(),它是一个 Posgtres 字符串函数,它使用 POSIX 正则表达式作为分隔符将字符串拆分为行。例如:

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

在您的情况下,它将使用','分隔符拆分函数的结果。它应该返回一个包含两行的结果集,如下所示:

c6787f5f2b2c885168162c8c8ffff220
8fe04393-c188-0e08-b710-a2ce89066768
于 2012-07-08T18:02:31.023 回答
1
SELECT * FROM pg_function(REMOTE_ADDR);
于 2012-07-09T06:25:27.307 回答