我有一个想要访问的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)
我当然可以解析那个字符串,但有没有一种方法可以实现我想要的,而我却错过了它?
SELECT * FROM pg_function(REMOTE_ADDR);
也许您使用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_table(),它是一个Posgtres字符串函数,可以使用POSIX正则表达式作为分隔符将字符串拆分为行。例如:
$query = "select regexp_split_to_table(
pg_function('" . Getenv("REMOTE_ADDR") . "'), ','
)";
在您的情况下,它将使用','
作为分隔符来分割函数的结果。它应该返回一个包含两行的结果集,如下所示:
c6787f5f2b2c885168162c8c8ffff220
8fe04393-c188-0e08-b710-a2ce89066768