2017-05-22 7 views
-1

내 웹 서버 (내부 용)를 최신 버전으로 전환해야하므로 새로운 perl과 새 DBD : DBD : Sybase 대신 Sybase를 사용했습니다.Perl DBI Sybase Asanywhere 바인드 변수 문제

나는 그들이 잘 작동하지만, DBD와 함께, regulary에 바인드 변수 문을 사용 :

AH01215: DBD::Sybase::st execute failed: Server >message number=12006 severity=16 state=0 line=0 text=SQL Anywhere-Fehler >-110: Element 'DBD1' ist bereits vorhanden

버전 :

새로운 기능 : DBD ::베이스

베이스가 나는 다음과 같은 오류가

/usr/local/lib/x86_64-linux-gnu/perl/5.22.1/DBD/Sybase.pm 설치 : 1.15

올드 : DBD :: ASAny

DBD :: ASAny 버전 1.14.

#!/usr/bin/perl 

use DBI; 
print "Content-type: text/html\n\n"; 

$dbh = DBI->connect("DBI:Sybase:server=tl", 'xxx', 'yyy', {PrintError => 1, AutoCommit => 0}) or die "Connection failed\n Connection string: $connstr\n Error message : $DBI::errstr\n"; 

$dbh2 = DBI->connect("DBI:Sybase:server=tl", 'xxx', 'yyy', {PrintError => 1, AutoCommit => 0}) or die "Connection failed\n Connection string: $connstr\n Error message : $DBI::errstr\n"; 

$select="select artnr, bez1, bez2 from art where artnr like 'F%12%.00'"; 
$sth_t=$dbh->prepare($select); 
$sth_t->execute(); 

$select="select lager_nr, bestand from bestand where art_nr = ? and coalesce(bestand,0) > 0 "; 
$sth_lager=$dbh2->prepare($select) or die "Prep sthlager nix:".$dbh2->errstr()."\n"; 

while (($artnr, $gtnr, $bez)=$sth_t->fetchrow()) 
{ 
    print $artnr."; ".$gtnr."; ".$bez; 
    $sth_lager->execute($artnr) or die "exec sthlager nix:".$dbh2->errstr()."\n"; 
    while (($lager,$bestand) = $sth_lager->fetchrow()) 
    { 
     print $lager." : ".$bestand." || "; 
    } 
    $sth_lager->finish(); 
    print "\n<br>"; 
} 

는 잘못된 라인은 "$ sth_lager-> 실행 ($의 artnr)"입니다 여러분 모두에게

+0

오류 메시지는 독일어입니까? 운전사 출신입니까? – simbabque

+0

어떤 모듈이 당신에게 적합한 지 알고 있다면, 모듈의 해당 버전을 정확히 설치할 수없는 이유가 있습니까? CPAN에 없으면 BackPAN에있을 수 있으므로 local :: lib를 사용하여 가져올 수 있어야합니다. – simbabque

+2

"요소 'DBD1'이 (가) 올바른 것으로 표시됩니다."Google에 표시 한 코드의 오류가 발생 했습니까? 이 오류는 "요소 'DBD1'이 (가) 이미 존재하며 테이블의 고유 색인을 위반하는 행을 삽입하려고 할 때 생성됨을 의미합니다. select 문에 의해 생성되는 것 같지는 않습니다. –

답변

0

감사 특히 simbabque, 그는 바른 길에 있었다. 대답은 간단합니다.
DBD :: ASAny는 SQL Anywhere를 처리하기 위해 작성되었지만 DBD :: Sybase는 Sybase Adaptive Server Enterprise 용이며이 두 시스템은 실제로 매우 다릅니다.
잘못된 도구를 사용했습니다. 안개.