Forum Webscript.Ru
Программирование => Perl => Тема начата: BonJorno от 01 Июля 2004, 11:50:57
-
Делаю запрос в скрипте к MSSQL через DBD-ODBC выдает ошибку:
Use of uninitialized value in concatenation (.) or string at C:/Perl/site/lib/DBI.pm line 576.
DBI connect(\'DRIVER=SQL Server;SERVER=myserver;DATABASE=mybase\',\'user\',...) failed
Этот же скрипт пускаю из командной строки выполняется безошибочно!
В чем тут грабли?
Соединение:
$dsn="DRIVER=SQL Server;SERVER=myserver;UID=user;PWD=parol;DATABASE=mybase";
$dbh = DBI->connect("DBI:ODBC:$dsn");
-
perldoc DBD::ODBC
use DBI;
$dbh = DBI->connect(\'dbi:ODBC:DSN\', \'user\', \'password\');
-
и заодно
perldoc perldiag
Use of uninitialized value%s
(W uninitialized) An undefined value was used as if it
were already defined. It was interpreted as a "" or a
0, but maybe it was a mistake. To suppress this warn
ing assign a defined value to your variables.
To help you figure out what was undefined, perl tells
you what operation you used the undefined value in.
Note, however, that perl optimizes your program and
the operation displayed in the warning may not neces
sarily appear literally in your program. For example,
"that $foo" is usually optimized into ""that " .
$foo", and the warning will refer to the "concatena
tion (.)" operator, even though there is no "." in
your program.
-
На самом деле тут проблема в другом.
Если коннектишся к базе через шелл, то она позволяет это делать через windows авторизацию, а когда коннектишся со страницы то требуется авторизация через базу.
Тогда вопрос, как сделать, чтоб с вебстраницы проходила windows авторизация?
-
BonJorno:
На самом деле тут проблема в другом.
Ошибку в скрипте сначала убери.
Потом подключайся с RaiseError => 1 и посмотрим что он ответит.
-
Так ошибки никакой нет, я уже сделал все работает, но через авторизацию базы.
$dbh = DBI->connect(\'dbi:ODBC:DSN\', \'Winuser\', \'password\');
работает из шелла. не работатет с вебстраницы.
$dbh = DBI->connect(\'dbi:ODBC:DSN\', \'Baseuser\', \'password\');
работает с вебстраницы.
Мне теперь просто интересно, почему из шелла достаточно windows авторизации, а с вебстраницы нужно прописывать юзера базы?
-
Я не уверен насчет виндовса...
Добавь эти строки и посмотри что выводится из-под консоли и в запуске через апач
print "Real UID: $<\\n";
print "Real GID: $(\\n";
print "Effective UID: $>\\n";
print "Effective GID: $)\\n"
-
Я вобщето юзаю IIS
в консоли по нулям.
В общем работает и хрен с ним.
-
BonJorno
Мне теперь просто интересно, почему из шелла достаточно windows авторизации, а с вебстраницы нужно прописывать юзера базы?
Потому, что из шелла запускаешь скрипт от своего имени (пользователя), а из сети интернет - от имени (пользователя) сервера, и я не думаю что пользователю IIS сервер можно делать все, что хочешь. Для етого отдельная авторизация при подключении к базе данных