Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > работа с ms sql


Автор: AlexeyKW 14.12.2005, 20:18
Делается запрос к таблице ms sql server.

use DBI;
print "Content-type: text/html\n\n";
print "<html>Код\n";
$dbh=DBI->connect('DBI:ODBC:IE', 'Administrator', '') or die "ODBC ERROR";
$sth=$dbh->prepare("select kod_specialnosti from kod_spec") or die "Prepare error";
$sth->execute() or die 'exec error';
while ($r = $sth->fetchrow_hashref()) {
print ("\n", $r->{kod_specialnosti}) ;
print "\n";}
print "</html>\n";

При выполнении в браузере выводися только слово "Код". Если же выполнить тот же
код в консоли (cmd), то все правильно работает. Подскажите пожалуйста в чем у меня ошибка.
Заранее спасибо!

Автор: BlackLFL 14.12.2005, 20:31
во первых \n замените на <br>
далее, вначале скрипта случаем не подключается модуль
use CGI::Carp qw(fatalsToBrowser);
а в пути к интерпритатору флаг -w ?

при запуске в браузере процесс умирает или продолжает жить? если жить то убейте его, и посмотрите, что отписалось в лог ...

Автор: Sadok 15.12.2005, 12:45
AlexeyKW
Цитата
while ($r = $sth->fetchrow_hashref()) {
print ("\n", $r->{kod_specialnosti}) ;
print "\n";}
print "</html>\n";

а так:
Код

while ($r = $sth->fetchrow_hashref()) {
    print "<br>";
    print $r->{kod_specialnosti};
    print "<br>";
}
print "</html>";

Автор: AlexeyKW 15.12.2005, 18:39
Заменил \n на <br>.
Никакие другие модули не подключены, то что я написал это полный текст скрипта (плюс в начале #!perl), ключей отладки нигде не стоит.
В логе сервера написано “DBI connect('IE','Administrator',...) failed …”, то есть видимо ошибка соединения. Но почему тогда работает скрипт в консоли? Для проверки я еще коннектился к ODBC через Delphi, тоже все работает.

Автор: sharq 15.12.2005, 23:53
AlexeyKW perldoc DBD::ODBC.

Ошибка в составление dsn коннекта.

Код

#!perl -w

use strict;
use DBI;
use CGI::Carp qw(fatalsToBrowser);

print "Content-type: text/html\n\n";
print "<html>Код\n";

my $DSN = 'driver={SQL Server};Server=server_name;database=database_name;uid=user;pwd=password;'; # подставь соотв. данные
my $dbh=DBI->connect("dbi:ODBC:$DSN") or die "$DBI::errstr\n";

my $sth=$dbh->prepare("select kod_specialnosti from kod_spec") or die "Prepare error";
$sth->execute() or die 'exec error';

while (my $r = $sth->fetchrow_hashref()) {
  print ("\n", $r->{kod_specialnosti}) ;
  print "\n";
}

print "</html>\n";


ВОт так запукай, проверяй, смотри.
smile

Автор: AlexeyKW 16.12.2005, 19:44
Вот в таком варианте все работает. Огромное спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)