3

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
4

1 に答える 1

1

はい、追加のコードが必要です。PG はドキュメントで説明されているようにテキスト形式で配列を想定しているため、配列をパラメーターとして渡すには自明ではない変換を行う必要があります 。 -IO

別の質問: PHP array to postgres arrayでは、その趣旨の PHP 関数が既に SO に送信されています。これは必要なものである可能性があります (再帰配列をサポートしているため、これまで以上に優れています)。

于 2012-04-04T14:53:52.100 に答える