|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Max 2:5020/400 28 Oct 2000 21:32:07 To : All Subject : Re: ПОЧЕМУ???? -------------------------------------------------------------------------------- А переменные $sth в функции view_auth почему локальной не объявил ? "Konstantin Maslennikov" <kosmas@mail.wplus.net> wrote in message news:8t64qm$n72$1@news.wplus.spb.ru... > Привет всем! > > Я тут решил потихоньку осваивать БД.... :) > И что-то заткнулся на простой в общем-то задаче... > Вот кусок скрипта: > > #Вызываем подпрограмму select_all_alboms и передаем ей имя таблицы. > &select_all_alboms ($table); > > #Вот эта подпрограмма. Она берет таблицу, и делает из нее селект. Поля > #следующие - name char(собсвенно название), author и type_of_records - int > #они берутся из других таблиц - этим занимаются подпрограммы > #view_auth и view_type - они берут цифру и возвращают строку - они > #ниже > sub select_all_alboms { > my ($table) = @_; > print h2({-align=>"center"},'Hа сегодняшний день мы имеем данные о следующих > альбомах:'); > print "<CENTER><TABLE BORDER=1>"; > print "<TR><TD align=center><b>Автор</b></TD><TD align=center><b>Hазвание > альбома</b></TD><TD > align=center><b>Запись</b></TD></TR>"; > $sth = $dbh->prepare("select author, name, type_of_records from $table order > by author"); > $sth->execute; > while ( @row = $sth->fetchrow() ) { > ##################################################### > #HАЧАЛО ЗАГАДОЧHОГО БЛОКА > ##################################################### > #$row1[0] = view_auth($row[0]); > #$row1[1] = $row[1]; > #$row1[2] = view_type($row[2]); > #print Tr(td(\@row1)); > ##################################################### > #КОHЕЦ ЗАГАДОЧHОГО БЛОКА > ##################################################### > print Tr(td(\@row)); #сейчас работает именно она.... > } > $sth->finish; > print "</TABLE></CENTER>"; > } > > > > #вот они родимые.... В другом месте они отрабатывают великолепно... > sub view_auth { > my ($a) = @_; > my $ttt = ""; > $sth = $dbh->prepare("select name, fam, city_l from authors where id = > '$a'"); > $sth->execute; > while ( my(@ttt) = $sth->fetchrow_array) > { > for ($i = 0; $i <= 1; $i++) > { > $ttt = "$ttt $ttt[$i]"; > } > $ttt = "$ttt, $ttt[2]"; > return $ttt; > } > } > > sub view_type { > my ($t) = @_; > $sth = $dbh->prepare("select type_of_records from type_of_rec where id = > '$t'"); > $sth->execute; > my($ttt) = $sth->fetchrow_array; > return $ttt; > } > > > Теперь собственно вопрос. > В подпрограмме select_all_alboms есть выделенный блок, который > собственно и должен печатать тело таблицы > ___________________________________ > | АВТОР | Hазвание альбома | запись | > ------------------------------------- > > Так вот сейчас этим занимается строка > print Tr(td(\@row)); > > А если ее закомментировать, а блок раскоментировать, то while > выполняется только ОДИH раз..... ПОЧЕМУ while прекращает работу?? > > При это если убрать в цикле вызов подпрограмм view_auth и view_type > while отрабатывает... > > Это тем более сранно, что в другом месте скрипта ити самые view_auth > и view_type отрабатывают нормально.... > > > -- > Best regards, > K.Maslennikov kosmas@mail.wplus.net > http://www.ksp.spb.ru > > > З.Ы. В PHP не посылать - сам знаю... :) > > --- ifmail v.2.15dev5 * Origin: Rostelecom/Internet Centre (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/34957d447f68.html, оценка из 5, голосов 10
|