Автор Тема: DBI::ODBC, не работает из CGI ?  (Прочитано 4477 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн samon

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.linage.ru
DBI::ODBC, не работает из CGI ?
« : 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 "<p>AA $element</p>\\n";
}

print "5\\n";


В shell это все работает, даже данные выдает.

Затыкается все на
 $sth $dbh->prepare(
SELECT     * 
FROM         table1"
); 


Причем очень интересно. Если я вместо prepare напишу
 $sth $dbh->xxxxxxx;
То CGI скрипт как работал, так и работает. Тоесть из под IIS он все также послушно считает до 2.

Из под shell разумеется сразу выдает ошибку.


В системе создан USER DSN с именем TM2 и ауентификацией windows.

Помогите, голову уже сломал.

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
DBI::ODBC, не работает из CGI ?
« Ответ #1 : 25 Июня 2005, 00:31:04 »
замени
#!/usr/bin/perl
на
#!/usr/bin/perl -w
use strict;

и следуй инструкциям в логе
0 OK, 0:1

Оффлайн samon

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.linage.ru
DBI::ODBC, не работает из CGI ?
« Ответ #2 : 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.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
DBI::ODBC, не работает из CGI ?
« Ответ #3 : 25 Июня 2005, 17:30:38 »
Цитировать
samon:
Тогда я получаю следующий список ошибок.

Цитировать
ondr:
и следуй инструкциям в логе
Ну к чему все это, лучше бы водки выпили...

Оффлайн samon

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.linage.ru
DBI::ODBC, не работает из CGI ?
« Ответ #4 : 25 Июня 2005, 18:27:20 »
Объявление глобальных переменных через our( $var2, $var3 ); помогло, теперь в shell ошибки не валят.

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


Тоесть общая ситуация не изменилась, может еще есть варианты?
« Последнее редактирование: 25 Июня 2005, 18:36:05 от samon »

Оффлайн samon

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.linage.ru
DBI::ODBC, не работает из CGI ?
« Ответ #5 : 25 Июня 2005, 19:00:25 »
Короче разобрался я.
Всем спасибо.

Надо было на этот скрипт в IIS указать права участника MSSQL с админскими правами.

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
DBI::ODBC, не работает из CGI ?
« Ответ #6 : 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\'
Ворота в perl - perlmonks.org.ru

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
DBI::ODBC, не работает из CGI ?
« Ответ #7 : 27 Июня 2005, 15:01:24 »
Спасибо за внимание, я разобрался сам.
Решение:
perldoc DBD::ODBC,
там где описывается DSN формат.
Ворота в perl - perlmonks.org.ru

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28