2012-05-06 32 views
1

我需要做的這個查詢:PostgreSQL的:通[]數組來pg_query_params

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]"] 如何傳遞的PARAMS到pg_query_params()爲數組?

這不是可以使用'{8,9,10,11,12,13,14,15,16,17,19,20,26,28}' postgres的陣列(因爲它可能包含字符串和字符串內此陣列可包含,和「)。

回答

2

查找的PostgreSQL Array Input and Output Syntax的詳細要求在手冊中。

基本上,你需要爲封裝與在雙引號""特殊字符數組元素可以雙引號的所有元素,但你不必而且,我引用手冊(見上文)。

ŧ o在帶引號的數組元素值中加上雙引號或反斜槓, 使用轉義字符串語法並在其前面加上反斜槓。

有一個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設置。反斜槓可能需要加倍,但PHP的pg模塊應該自動爲你做。