我有一个我希望访问的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)
我当然可以解析那个字符串,但是有没有办法实现我想要的东西,我错过了它?
答案 0 :(得分: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
答案 1 :(得分:1)
SELECT * FROM pg_function(REMOTE_ADDR);