Forum Webscript.Ru
Программирование => Perl => Тема начата: samon от 24 Июня 2005, 22:42:00
-
Есть маленький скрип на perl
Пытаюсь обратиться к MSSQL.
Из shell все работает, из под IIS нет.
Причем все это как то очень хитро. Следующий скрипт выводит в STDOUT счетчик от 1 до 4.
при исполнении скрипта из под IIS мы получаем только 1,2.
#!/usr/bin/perl
use CGI qw/:all/;
use DBI;
print "Content-type: text/html\\n\\n";
print "1\\n";
$dbh = DBI->connect(\'dbi:ODBC:TM2\',\'sa\', \'123\');
print "2\\n";
$sth = $dbh->prepare("
SELECT *
FROM table1");
print "3\\n";
$sth->execute();
print "4\\n";
@row = $sth->fetchrow_array();
foreach $element (@row)
{
print "AA $element
\\n";
}
print "5\\n";
В shell это все работает, даже данные выдает.
Затыкается все на
$sth = $dbh->prepare("
SELECT *
FROM table1");
Причем очень интересно. Если я вместо prepare напишу
$sth = $dbh->xxxxxxx;
То CGI скрипт как работал, так и работает. Тоесть из под IIS он все также послушно считает до 2.
Из под shell разумеется сразу выдает ошибку.
В системе создан USER DSN с именем TM2 и ауентификацией windows.
Помогите, голову уже сломал.
-
замени
#!/usr/bin/perl
на
#!/usr/bin/perl -w
use strict;
и следуй инструкциям в логе
-
Тогда я получаю следующий список ошибок.
Global symbol "$dbh" requires explicit package name at E:\\WMSystem\\WM1\\test3.pl line 13.
Global symbol "$sth" requires explicit package name at E:\\WMSystem\\WM1\\test3.pl line 17.
Global symbol "$dbh" requires explicit package name at E:\\WMSystem\\WM1\\test3.pl line 17.
Global symbol "$sth" requires explicit package name at E:\\WMSystem\\WM1\\test3.pl line 24.
Global symbol "@row" requires explicit package name at E:\\WMSystem\\WM1\\test3.pl line 28.
Global symbol "$sth" requires explicit package name at E:\\WMSystem\\WM1\\test3.pl line 28.
Global symbol "$element" requires explicit package name at E:\\WMSystem\\WM1\\test3.pl line 30.
Global symbol "@row" requires explicit package name at E:\\WMSystem\\WM1\\test3.pl line 30.
Global symbol "$element" requires explicit package name at E:\\WMSystem\\WM1\\test3.pl line 32.
Execution of E:\\WMSystem\\WM1\\test3.pl aborted due to compilation errors.
-
samon:
Тогда я получаю следующий список ошибок.
ondr:
и следуй инструкциям в логе
-
Объявление глобальных переменных через our( $var2, $var3 ); помогло, теперь в shell ошибки не валят.
Но IIS также упорно продолжает считать до 2х
Тоесть общая ситуация не изменилась, может еще есть варианты?
-
Короче разобрался я.
Всем спасибо.
Надо было на этот скрипт в IIS указать права участника MSSQL с админскими правами.
-
Тут проблема с подключением к БД. Незнаю - в perl или в sql. ситуация такая:
Скрипт (не CGI), коннектится к БД на удаленном сервере.
На сервере стоит и MySQL и MSSQL.
При коннекте к MySQL - все проходит красиво :).
Но при попытке коннекта к mssql - вот что выдает в терминал:
DBI connect(\'host=prebill-srv:database=traffic\',\'optse\',...) failed: [Microsoft]
[ODBC Driver Manager] Data source name not found and no default driver specified
(SQL-IM002)(DBD: db_login/SQLConnect err=-1) at traffic.pl line 36
При этом на сервере я создал базу traffic, проставил все права юзеру optse, создал там все нужные таблицы и проч. Почему такая ошибка?
Я с MSSQL работаю впервые - до этого всегда обходился mysql.
Спасибо.
P.S
Коннект я осуществляю так:
my $dbh=DBI->connect("DBI:$config{\'driver\'}:host=$config{\'hostname\'}:database=$config{\'database\'}",$config{\'user\'},$config{\'password\'},
{ RaiseError => 1, AutoCommit => 0, PrintError => 1});
где $config{\'driver\'}=\'ODBC\'
-
Спасибо за внимание, я разобрался сам.
Решение:
perldoc DBD::ODBC,
там где описывается DSN формат.