2012-05-06 15 views
1

をpg_query_paramsする[]配列を渡す:のPostgreSQL:私はこのクエリを実行する必要があり

SELECT * FROM property_select(ARRAY[8,9,10,11,12,13,14,15,16,17,19,20,26,28]) 

をPHP関数pg_query_params($prepared, $params)を使用。

準備クエリは次のとおりです。

SELECT * FROM property_select($1); 

paramsがある:["ARRAY[8,9,10,11,12,13,14,15,16,17,19,20,26,28]"] にはどうすれば配列としてpg_query_params()へのparamsを渡すことができますか?

(それが含まれていて、「あり、この配列内の文字列と文字列が含まれる可能性があるので)それは'{8,9,10,11,12,13,14,15,16,17,19,20,26,28}' postgresの配列を使用することはできません。

答えて

2

手動でPostgreSQLのArray Input and Output Syntaxための詳細な要件を検索します。

基本的には、あなたは二重引用符""で特殊文字を配列要素を囲む必要がありますが、二重引用符のすべての要素をすることができますが、あなたがする必要はありませんそして、私が(上記参照)、マニュアルを引用:。。

T引用符付きの配列要素の値に二重引用符またはバックスラッシュを入れると、 はエスケープ文字列構文を使用し、その前にバックスラッシュを付けます。

piece of PHP code posted by a user in the manualがあります:

//$t is array to be escaped. $u will be string literal. 
    $tv=array(); 
    foreach($t as $key=>$val){ 
    $tv[$key]="\"" . 
     str_replace("\"",'\\"', str_replace('\\','\\\\',$val)) . "\" 
"; 
    } 
    $u= implode(",",$tv) ; 
    $u="'{" . pg_escape_string($u) . "}'"; 

related answer here on SOもあります:

またstandard_conforming_stringsの設定を検討してください。バックスラッシュを2倍にする必要があるかもしれませんが、PHPのpg-modulesはそれを自動的に行います。

関連する問題