PostgreSQL:将ARRAY []传递给pg_query_params

Dmi*_*try 3 php arrays postgresql

我需要做这个查询:

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

使用PHP函数pg_query_params($prepared, $params).

准备好的查询是:

SELECT * FROM property_select($1);
Run Code Online (Sandbox Code Playgroud)

参数是:["ARRAY[8,9,10,11,12,13,14,15,16,17,19,20,26,28]"] 我如何将参数传递给pg_query_params()数组?

不可能使用'{8,9,10,11,12,13,14,15,16,17,19,20,26,28}'postgres数组(因为它可能包含字符串和此数组中的字符串可能包含,和").

Erw*_*ter 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) . "}'";
Run Code Online (Sandbox Code Playgroud)

SO上还有一个相关的答案:

还要考虑设置standard_conforming_strings.反斜杠可能需要加倍,但PHP的pg-modules应该自动为你做.