2012-03-23 2 views
3

저는 Perl 스크립트로 작업 중이며 명명 된 매개 변수를 사용하여 Postgres 데이터베이스에서 쿼리를 수행하고 싶습니다.이름을 사용하여 Perl에서 postgres 쿼리에 매개 변수 바인딩하기

일부 드라이버는 같은 자리 수 있습니다 : 이름과 : N (예 : 1, 2, 등)?를 DBI documentation은하지 휴대용 말한다뿐만 아니라, 그러나 그들의 사용은 이식 할 수 없습니다

어쨌든하고 싶습니다. 누구든지 Postgres 드라이버가 구현하는지 알고 있습니까? 대신이 같은 쿼리를 수행

는 :

$q = $pg->prepare($query); 
$q->bind_param(1, "value"); 
$q->bind_param(2, "value"); 
$q->execute(); 

나는 같은 것을 할 싶습니다

$q = $pg->prepare($query); 
$q->bind_param("parameterX", "value"); 
$q->bind_param("parameterY", "value"); 
$q->execute(); 

건배!

EDIT

(I 결장 누락되었다) 올바른 구문은 다음 :

$q = $pg->prepare($query); 
$q->bind_param(":parameterX", "value"); 
$q->bind_param(":parameterY", "value"); 
$q->execute(); 

답변

4

It is supported하지만 낙담 :

가 마지막 자리 유형 "라는 매개 변수 "를": foo "형식으로 지정하십시오. 이 구문은 DBD :: Pg에서 지원되지만, 달러 기호 번호를 사용하는 것은 바람직하지 않습니다.

다른 유형의 자리 표시자는 명령문 내에서 혼합 될 수 없지만 가지고있는 명령문 핸들마다 다른 유형을 사용할 수 있습니다. 이것은 혼란 스럽지만 프로그램 내에서 하나의 스타일을 고수하십시오.

+0

실제로 작동합니다. 내 매개 변수 이름 앞에 콜론이 누락되었습니다. – Andre

+0

@Andre : PostgreSQL 배열을 사용하여 작업 할 때':'를 사용하기 때문에 PostgreSQL에 번호가 매겨진'$ n' 스타일의 자리 표시자를 권장합니다. http://stackoverflow.com/a/8627741/479863 –

+1

권장 사항을 이해하지만 30 가지 매개 변수와 같은 작업에 관해서는 오히려 이름으로 호출하고 즉시보고있는 것을 알고 싶습니다. 링크를 가져 주셔서 감사합니다. – Andre

-1

Postgres 드라이버는 DBD::Pg 모듈에 있습니다 (오프라인 설명서 : perldoc DBD::Pg).

+2

이 "대답"은 "물이 젖었습니다" – mvp

관련 문제