Issue: Perl-Skript in Eingabeaufforderung funktioniert gut, aber nicht auf ODBC als CGI-SkriptPerl-Skript arbeitet in Eingabeaufforderung OK, aber nicht auf ODBC als CGI-Skript
Einstellungen: Win XP Pro 64-Bit-Version 2003 SP2 Apache 2.2.17 Win32 Aktive Perl 5.12.2 (nicht Perl64) eine ODBC-DSN für SQL Server erstellt wird
Details: von Eingabeaufforderung läuft Phone.pl OK - es Abfrageergebnisse wird wie erwartet - was bedeutet, DBI funktioniert gut
als ein CGI-Skript, Ph one.pl gibt HTML wie erwartet vor dem ODBC-Initialisierungscode aus. (Apache-Einstellungen funktioniert OK für Nicht-ODBC-Skript.)
hier ist die msg in error.log von Apache
[Di 23. November 2010 13.27.57] [Fehler] [client 127.0.0.1] DBI connect ('SQLSVR206', 'Administrator', ...) fehlgeschlagen: [Microsoft] [ODBC-Treiber-Manager] Datenquellenname nicht gefunden und kein Standardtreiber angegeben (SQL-IM002) unter C: /CGI/Phone.pl Zeile 32
Irgendeine Idee, warum es sich anders verhält?
#!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: ein Teil des Problems ist die 32-Bit-VS 64-Bit-ODBC-Ausgabe http://support.microsoft.com/kb/942976
JEDOCH sehen, nachdem ich ODBC einrichten, habe ich noch habe folgenden Fehler in Apache Log [Wed Nov 24 01:38:48 2010] [Fehler] [Client 127.0.0.1] DBI Verbindung ('SQLSVR206-32', '', ...) fehlgeschlagen: [Microsoft] [ODBC SQL Server-Treiber] [SQL Server] Anmeldung fehlgeschlagen für Benutzer 'MYDOMAIN \ GARY $'. (SQL-28000) bei C: /CGI/test.pl Zeile 15
Ich habe mich als MYDOMAIN \ Administrator angemeldet und Apache gestartet. ODBC wurde eingerichtet, um "Mit Windows NT-Authentifizierung mit der Netzwerk-Login-ID verwenden" Woher kommt diese "MYDOMAIN \ GARY $"? Vielen Dank!
============================================== ============ FINAL UPDATE: Apache Dienste läuft mit "Local System account", und das ist, wo die "MYDOMAIN \ GARY $" herkommt. Die Sache ist, GARY ist nicht mit der Firma und seine ID wurde von SQL Server gelöscht, aber ODBC-Code in CGI geerbt GARY von Apache, was zu Fehler 28000. So war das Problem eine Faltung von 1) 32/64 Bit ODBC DSN und 2) von Apache verwendetes Standardkonto
Es wäre sehr nützlich sein, wenn Sie das Skript in Frage posten könnten, oder die relevanten Teile zumindest. –
Danke für den Kommentar. Ich habe gerade den Quellcode hinzugefügt. –