2010-11-23 4 views
1

문제가 CGI 스크립트로 ODBC 실패 2003 SP2는 아파치 2.2.17에서 Win32 액티브 펄 5.12.2 (안 Perl64) 는 ODBC DSN은 SQL 서버에 생성됩니다펄 스크립트는 명령 프롬프트에서 확인을 작동하지만,

상세 사항 : 명령 프롬프트에서 Phone.pl 확인을 실행 - 예상대로 쿼리 결과를 얻을 수 - 이는 DBI가 잘 작동 함을 의미합니다.

을 CGI 스크립트로, Ph one.pl은 ODBC 초기화 코드 전에 예상대로 HTML을 인쇄합니다. (아파치 설정은 비 ODBC 스크립트에 대한 확인을 작동합니다.) 여기

아파치의하는 error.log

[화 11월 13시 27분 57초 2010 23] [오류] [고객 127.0.0.1] DBI의 MSG의 connect ('SQLSVR206', 'administrator', ...) 실패 : [Microsoft] [ODBC 드라이버 관리자] C : /CGI/Phone.pl에서 데이터 원본 이름을 찾을 수없고 기본 드라이버가 지정되지 않았습니다 (SQL-IM002).

왜 다르게 동작하는지 알고 싶습니다.

#!c:/perl/bin/perl.exe 
use CGI qw(:standard); 
use strict; 
use warnings; 
use DBI; 

my ($sqlstr, $sql_UNITED, $dbh206); 

# 206 
# select * from getProvFINON('270762789')#TIN 
my @colUNITED = qw/ADR_LN_1_TXT PROV_SYS_ID ZIP_CD FULL_NM SOURCE PROV_TIN BILL_TEL/; 

sub Init(){ 
    $dbh206 = DBI->connect ("dbi:ODBC:SQLSVR206",'USER','PASSWORD',{RaiseError=>1}) 
     or die $DBI::errstr; 
    $sqlstr = qq/ select * from getProvFINON(?) /; #parameters TIN 
    $sql_UNITED = $dbh206->prepare($sqlstr) 
     or die "prepare failed: " . $dbh206->errstr(); 
} 

sub test1{ 
    my $tin = shift(); 
    $sql_UNITED->execute($tin) or die $sql_UNITED->errstr; 
    my $row = $sql_UNITED->fetchrow_hashref; 
    while(defined ($row)){ 
    foreach(@colUNITED){ 
     print $row->{$_}."~~~"; 
    } 
    print "<p>"; 
    $row = $sql_UNITED->fetchrow_hashref; 
    } 
} 

print header; 
print "test text<p>"; 
Init(); 
test1('270762789'); 
print "999999999999<p>"; 

=========================================== =============== UPDATE : 문제점의 일부이며 I는 ODBC를 설정 한 후에는 그러나 http://support.microsoft.com/kb/942976

볼 64 비트 ODBC 문제 VS 32 비트, I 여전히 아파치 로그에 다음과 같은 오류가 발생했습니다. [Wed 11 월 24 일 01:38:48 2010] [오류] [클라이언트 127.0.0.1] DBI 연결 ('SQLSVR206-32', '', ...) 실패 : [Microsoft] [ODBC SQL Server 드라이버] [SQL Server] 'MYDOMAIN \ GARY $'사용자 로그인에 실패했습니다. (SQL-28000) C에서 : 나는 MYDOMAIN \ 관리자로 로그인하고 아파치를 시작 15

/CGI/test.pl 라인. ODBC가 "네트워크 로그인 ID를 사용하여 Windows NT 인증"을 사용하도록 설정되었습니다. "MYDOMAIN \ GARY $"는 어디서 왔습니까? 감사!

============================================== ============ 최종 업데이트 : Apache 서비스는 "로컬 시스템 계정"을 사용하여 실행되며 "MYDOMAIN \ GARY $"의 출처입니다. 문제는 게리 회사와 함께하지 않고 문제가 1) 32/64 비트 ODBC의 회선이었다 자신의 ID가 SQL 서버에서 삭제되었지만, CGI에서 ODBC 코드 그래서 오류 28000. 의 결과로, 아파치에서 게리을 상속입니다 DSN 및 2) Apache에서 사용하는 기본 계정

+0

그것은 매우 유용 할 것이다 : 뭔가를 찾고 ODBC 파일로

use DBI; use SQL::Abstract; my $CONNECT = "FILEDSN=thefile.dsn"; my $dbh = DBI->connect("dbi:ODBC:$CONNECT", "myidsid", "passwordThatsNotUsed"); 

. –

+0

코멘트 주셔서 감사합니다. 방금 소스 코드를 추가했습니다. –

답변

1

ODBC 데이터 원본은 '시스템 DSN'이 아닌 '사용자 DSN'에 나열되어있을 수 있습니다. 웹 서버가 실행되는 ID는 System DSN에만 액세스 할 수 있다고 생각합니다. http://www.truthsolutions.com/sql/odbc/creating_a_new_odbc_dsn.htm

+0

여기 무슨, 당신에게 정규식 감사 - 1. 때 "펄 test.pl"는 펄은 사용자 DSN이 아니라 시스템 DSN에 보이는 것 같다. 2. 시스템 DSN을 추가했고 CGI는 이전과 같은 오류 메시지와 함께 여전히 실패합니다. –

+0

커맨드 라인에서 32 비트 버전의 Perl을 사용하고 있지만 웹 서버가 64 비트 버전을 사용하고있을 가능성이 있습니까? 내가 읽은 다른 포럼에 따르면, 별도의 ODBC 드라이버가 필요할 것입니다. – regex

+0

커맨드 라인과 CGI에 대해 동일한 Perl을 실행하고있었습니다. 문제가 해결되어 원래 게시물을 업데이트했습니다. 당신의 도움을 주셔서 감사합니다! –

0

뭔가 윈도우 7 ODBC 연결과 함께입니다 : 내 게시물이 이해가되지 않는 경우

, 나는 시스템 DSN의 대 사용자 사이의 차이에 대한 정보에 대한 링크를 추가하기 위해 편집을하고있어 나도 알아낼 수 없다. 내가 ODBC를 설정하고 괜찮을거야하지만 당신이 보여주는 것과 비슷한 오류가 발생합니다. MS SQL Server Mgmt Studio를 일부 SQL 서버에 연결하는 경우에도 추가 연결 설정을 명시 적으로 넣어야합니다. 일부 SQL 서버 (내가 소유하지 않은 SQL 서버)에만 문제가 있기 때문에 서버 측 문제라고 생각합니다. PERL에서 마침내 포기하고 추가 연결 설정으로 DSN 파일을 작성하고 직접 가리켰습니다. 서버 이름이 두 번 표시됩니다.당신이 문제의 스크립트를 게시하거나 적어도 관련 부품 수 있다면

[ODBC] 
DRIVER=SQL Server Native Client 10.0 
UID=myidsid 
Address=servername,3180 
Network=DBMSSOCN 
APP=Microsoft® Windows® Operating System 
Trusted_Connection=Yes 
SERVER=servername 
PWD=someTextInPlaceOfPasswordAsItsNotUsed 
+0

"괜찮습니까?"라고 말하면 두 ODBC 명령 모두에서 테스트 했습니까? 64 비트 창에는 \ Windows \ SysWoW64 아래에 하나, \ Windows \ System32 아래에 두 개의 Odbcad32.exe가 있기 때문입니다. 이 두 exe는 몇 가지 공유 구성을 표시합니다. Microsoft 링크를 참조하십시오. –

관련 문제