如何将数组编码为URL参数,在PHP中提取并作为函数参数传递给Postgres

时间:2012-04-04 05:49:28

标签: php web-services postgresql url

如果我有正确工作的postgres功能(类似于下面);

package."func_SetValues"(id integer, values integer[])
    DECLARE
        i integer;
    BEGIN
    FOR i IN 1..array_upper(values, 1) 
      LOOP
       EXECUTE package."func_DoStuff"(id, values[i]);
      END LOOP;
    END
    LANGUAGE 'plpgsql' VOLATILE

并且,一个PHP脚本doStuff.php,调用此函数接受并使用这些值作为url编码参数。

$dbconn = pg_connect("host=192.168.1.222 port=5432 dbname=betya user=betya_user password=bettyboo")
    or die('Could not connect: ' . pg_last_error());
$query = 'SELECT * FROM package."func_SetValues"($1, $2)';
$result=pg_prepare($dbconn, "qy", $query);
$paramater1=$_REQUEST['id'];    
$paramater2=$_REQUEST['arr']; 
$result=pg_execute($dbconn, "qy", array($paramater1, $paramater2));

while($e=pg_fetch_assoc($result))
$output[]=$e;

print(json_encode($output));
pg_free_result($result);
pg_close($dbconn);

为了测试PHP脚本,以下URL是否正确地对数组'arr'进行编码,以便PHP可以“请求”这些值并且可以传递给它理解的postgres?或者脚本中是否需要进一步的功能才能正确传递给pg_execute命令?

http://192.168.1.50/server/doStuff.php?id=1790&arr[]=1788&arr[]=1790&arr[]=1805

1 个答案:

答案 0 :(得分:1)

是的,需要进一步的代码。该数组必须非平凡地转换为作为参数传递,因为PG期望它以文本形式如文档中所述: http://www.postgresql.org/docs/current/static/arrays.html#ARRAYS-IO

在另一个问题:PHP array to postgres array,这个效果的PHP函数已经提交给S.O.,它可能就是你需要的东西(并且因为它支持递归数组而更好)。