4

このクエリを実行する必要があります:

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

パラメータは次のとおりです: パラメータを配列として["ARRAY[8,9,10,11,12,13,14,15,16,17,19,20,26,28]"] 渡すにはどうすればよいですか?pg_query_params()

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

4

2 に答える 2

5

PostgreSQL配列の入力および出力構文の詳細な要件については、マニュアルを参照してください。

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

引用符で囲まれた配列要素の値に二重引用符または円記号を入れるには、エスケープ文字列構文を使用し、その前に円記号を付けます。

ユーザーがマニュアルに投稿した PHP コードの一部があります。

  //$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) . "}'";

SO には関連する回答もあります。

の設定も考慮してstandard_conforming_stringsください。バックスラッシュを二重にする必要があるかもしれませんが、PHP の pg-modules が自動的にそれを行うはずです。

于 2012-05-06T18:00:01.580 に答える