1
Perl DBI에서 IN 쿼리에 대한 SQL 세트에 변수를 바인드하려면 어떻게합니까?Perl DBI -리스트 바인딩
예 :
my @nature = ('TYPE1','TYPE2'); # This is normally populated from elsewhere
my $qh = $dbh->prepare(
"SELECT count(ref_no) FROM fm_fault WHERE nature IN ?"
) || die("Failed to prepare query: $DBI::errstr");
# Using the array here only takes the first entry in this example, using a array ref gives no result
# bind_param and named bind variables gives similar results
$qh->execute(@nature) || die("Failed to execute query: $DBI::errstr");
print $qh->fetchrow_array();
TYPE1
만 카운트 위와 같은 결과 코드 결과, 필요한 출력 TYPE1
및 TYPE2
의 카운트의 합이된다. 바인드 항목을 @nature
(\@nature
)에 대한 참조로 바꾸면 결과가 0입니다.
주요 사용 사례는 사용자가 확인란 그룹과 같은 것을 사용하여 여러 옵션을 검사 할 수 있도록 허용하고 모든 결과를 반환하는 것입니다. 해결 방법은 쿼리에 삽입 할 문자열을 만드는 것입니다. SQL 인젝션 문제를 피하기 위해 많은 필터링이 필요하지만 추한 것입니다 ...
필자의 경우 데이터베이스는 Oracle입니다. 이상적으로는 데이터베이스의 영향을받지 않는 제네릭 솔루션이 필요합니다.
재미있는 방법 ...하지만 이름이 바인드 변수에 대한 작동하지 않습니다 ... (나는 최대한의 예를 단순화하려고 내 전체 쿼리 내가 사용하고 몇 가지 반복 변수가 오라클 스타일': name' 변수) ('?'와 명명 된 타입을 혼합 할 수 있을지 궁금합니다 ...) 집합 /리스트를 직접 바인드하는 방법이 있기를 바라고 있습니다 ... –
AFAIK, Oracle 용으로 명명 된 자리 표시 자만 사용합니다. –
다른 드라이버와 함께,': 1',': 2' 등등을 사용할 수 있습니다 ... –