2012-04-03 2 views
2

저는 PostgeSQL에서 PHP로 작업하고 있습니다. PosrgeSQL을 사용하면 테이블의 열을 배열로 정의 할 수 있습니다.PostgreSQL : 배열 데이터 형식이 PHP로

그래서 내가 같은 테이블이 있다고 가정 해 봅시다 :

CREATE TABLE sal_emp (
    a   text ARRAY, 
    b   text ARRAY, 
    c   text ARRAY, 
); 

이 내 배열 인 :

$a = array(aa,bb,cc); 
$b = array(dd,dd,aa); 
$c = array(bb,ff,ee); 

와 내가 각각의 칼럼에이 같은 각을 삽입 할 :

 a  |  b  |  c  
-----------+------------+------------ 
{aa,bb,cc} | {dd,dd,aa} | {bb,ff,ee} 

이 방법은?

$a = implode(',', $a); 
$b = implode(',', $b); 
$c = implode(',', $c); 
$a = array('a' => $a, 'b' => $b, 'c' => $c); 
pg_insert($dbconn, 'table', $a); 

동일한 결과를 얻으려면 더 좋은 방법이 있습니까?

+0

그것은 문자열 조작의 문제입니다. PHP 배열을 Postgres가 쿼리에서 받아 들일 수있는 문자열 표현으로 바꾸십시오 : http://www.postgresql.org/docs/9.1/static/arrays.html –

+0

@MarcB 그래, 알아,하지만 알았어. 정확하고 더 나은 방법이 있다면. PostgreSQL에 대한 새로운 기능입니다. –

+0

올바른 방법은 데이터베이스를 정상적으로 정규화하고 PostgreSQL 배열을 전혀 사용하지 않는 것입니다. –

답변

0

작성 문에 오류가 있습니다. 이것은 올바른 :

insert into sal_emp (a, b, c) values 
('{"some text"}', '{"some more", "a bit more"}', '{"even more"}'); 

또는

insert into sal_emp (a, b, c) values 
(array ['some text'], array['some more', 'a bit more'], array['even more']); 

을 그래서 ... 나는 지금 그것을 테스트 할 수 있지만이 것 :

CREATE TABLE sal_emp (
    a   text ARRAY, 
    b   text ARRAY, 
    c   text ARRAY 
); 

수동으로 삽입한다면 당신이 할 것 다음과 같이하십시오 :

$a = "array['" . implode("'],['", $a) . "']"; 
... 
$a = array('a' => $a, 'b' => $b, 'c' => $c); 
pg_insert($dbconn, 'table', $a);