2012-04-04 14 views
2

正しく動作するpostgres関数を持っている場合(以下同様);配列をURLパラメータとしてエンコードし、PHPで抽出し、関数パラメータとして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 

そして、値を受け取り、URLエンコードされたパラメータとして使用するこの関数を呼び出すPHPスクリプトのdoStuff.php。 PHPスクリプトをテストするには

$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); 

、以下のURLが正しくPHPは「リクエスト」の値をすることができますし、それが理解離れでのpostgresに渡すことができるように配列「ARR」をエンコードするのでしょうか?または、pg_executeコマンドに正しく渡すために、スクリプトにさらに機能が必要ですか?

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

答えて

1

はい、さらにコードが必要です。アレイは、ドキュメントに記載されているようにPGがテキスト形式でそれを期待しているため、非自明、パラメータとして渡されるように変換しなければならない。 http://www.postgresql.org/docs/current/static/arrays.html#ARRAYS-IO

別の質問で:PHP array to postgres array、PHP関数その効果には既にされていますSOに提出すると、あなたが必要とするものだけかもしれません(再帰的な配列をサポートしているので、これまで以上に優れています)。

関連する問題