【问题标题】:How to encode an array as URL parameter, extract in in PHP and pass to Postgres as function parameter如何将数组编码为 URL 参数,在 PHP 中提取并作为函数参数传递给 Postgres
【发布时间】:2012-04-04 22:53:52
【问题描述】:

如果我有一个正常工作的 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 是否以 PHP 可以“请求”值并可以将其理解的方式传递给 postgres 的方式正确编码数组 'arr'?还是脚本中需要更多功能才能正确传递给 pg_execute 命令?

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

【问题讨论】:

    标签: php web-services postgresql url


    【解决方案1】:

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

    另外一个问题:PHP array to postgres array,一个 PHP 函数已经提交给 S.O.,它可能正是你所需要的(而且更好,因为它支持递归数组)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2021-03-26
      • 2019-08-05
      • 1970-01-01
      • 2013-01-27
      • 2012-12-07
      相关资源
      最近更新 更多