在PHP中处理Postgres输出函数参数

问题描述:

我有一个希望访问的Postgres数据库。我需要调用DB中存在的几个函数。我已经实现了与数据库的连接并运行查询。我也实现了调用我想要的功能。我的问题是,当一个Postgres函数有不止一个OUT参数,而不是返回数组我可以访问任何与胶印或与该行的名称,它,而不是返回一个字符串与两个OUT参数:在PHP中处理Postgres输出函数参数

$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

'var_dumb' :-)我想在核心被纳入该别名。 – PeeHaa 2012-07-08 16:25:56

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_to_table(),它是将一个字符串分解到使用POSIX正则表达式作为分隔符行的Posgtres字符串函数。例如:

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

在你的情况下,它会分裂使用','作为分隔符函数的结果。它应该返回两行的结果集,如下图所示:

c6787f5f2b2c885168162c8c8ffff220 
8fe04393-c188-0e08-b710-a2ce89066768