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

时间:2012-07-08 16:13:22

标签: php postgresql

我有一个我希望访问的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)

我当然可以解析那个字符串,但是有没有办法实现我想要的东西,我错过了它?

2 个答案:

答案 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);