Forum Webscript.Ru

Программирование => Perl => Тема начата: samon от 24 Июня 2005, 22:42:00

Название: DBI::ODBC, не работает из CGI ?
Отправлено: 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.

Помогите, голову уже сломал.
Название: DBI::ODBC, не работает из CGI ?
Отправлено: ondr от 25 Июня 2005, 00:31:04
замени
#!/usr/bin/perl
на
#!/usr/bin/perl -w
use strict;

и следуй инструкциям в логе
Название: DBI::ODBC, не работает из CGI ?
Отправлено: samon от 25 Июня 2005, 14:20:20
Тогда я получаю следующий список ошибок.
Цитировать

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.
Название: DBI::ODBC, не работает из CGI ?
Отправлено: glebushka от 25 Июня 2005, 17:30:38
Цитировать
samon:
Тогда я получаю следующий список ошибок.

Цитировать
ondr:
и следуй инструкциям в логе
Название: DBI::ODBC, не работает из CGI ?
Отправлено: samon от 25 Июня 2005, 18:27:20
Объявление глобальных переменных через our( $var2, $var3 ); помогло, теперь в shell ошибки не валят.

Но IIS также упорно продолжает считать до 2х


Тоесть общая ситуация не изменилась, может еще есть варианты?
Название: DBI::ODBC, не работает из CGI ?
Отправлено: samon от 25 Июня 2005, 19:00:25
Короче разобрался я.
Всем спасибо.

Надо было на этот скрипт в IIS указать права участника MSSQL с админскими правами.
Название: DBI::ODBC, не работает из CGI ?
Отправлено: cr4ck3r от 27 Июня 2005, 12:04:49
Тут проблема с подключением к БД. Незнаю - в 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\'
Название: DBI::ODBC, не работает из CGI ?
Отправлено: cr4ck3r от 27 Июня 2005, 15:01:24
Спасибо за внимание, я разобрался сам.
Решение:
perldoc DBD::ODBC,
там где описывается DSN формат.