|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/371.32 25 Oct 2000 18:17:12 To : kosmas@mail.wplus.net Subject : Re: ПОЧЕМУ??? -------------------------------------------------------------------------------- kmwn> From: "Konstantin Maslennikov" <kosmas@mail.wplus.net> kmwn> Привет всем! kmwn> Я тут решил потихоньку осваивать БД.... :) kmwn> И что-то заткнулся на простой в общем-то задаче... kmwn> Вот кусок скрипта: kmwn> #Вызываем подпрограмму select_all_alboms и передаем ей имя таблицы. kmwn> &select_all_alboms ($table); kmwn> #Вот эта подпрограмма. Она берет таблицу, и делает из нее селект. Поля kmwn> #следующие - name char(собсвенно название), author и type_of_records - int kmwn> #они берутся из других таблиц - этим занимаются подпрограммы kmwn> #view_auth и view_type - они берут цифру и возвращают строку - они kmwn> #ниже kmwn> sub select_all_alboms { kmwn> my ($table) = @_; kmwn> print h2({-align=>"center"},'Hа сегодняшний день мы имеем данные о kmwn> следующих альбомах:'); print "<CENTER><TABLE BORDER=1>"; print "<TR><TD kmwn> align=center><b>Автор</b></TD><TD kmwn> align=center><b>Hазвание альбома</b></TD><TD align=center><b>Запись</b></T kmwn> D></TR>"; $sth = $dbh->prepare("select author, name, type_of_records from kmwn> $table order by author"); execute; while ( @row = $sth->fetchrow() ) kmwn> { ##################################################### #HАЧАЛО kmwn> ЗАГАДОЧHОГО kmwn> БЛОКА ##################################################### #$row1[0] = kmwn> view_auth($row[0]); #$row1[1] = $row[1]; #$row1[2] = kmwn> view_type($row[2]); #print kmwn> Tr(td(\@row1)); ##################################################### #КОH kmwn> ЕЦ ЗАГАДОЧHОГО БЛОКА ##################################################### kmwn> print Tr(td(\@row)); #сейчас работает именно она.... kmwn> } kmwn> $sth->finish; kmwn> print "</TABLE></CENTER>"; kmwn> } kmwn> #вот они родимые.... В другом месте они отрабатывают великолепно... kmwn> sub view_auth { kmwn> my ($a) = @_; kmwn> my $ttt = ""; kmwn> $sth = $dbh->prepare("select name, fam, city_l from authors where id = kmwn> '$a'"); kmwn> $sth->execute; kmwn> while ( my(@ttt) = $sth->fetchrow_array) kmwn> { kmwn> for ($i = 0; $i <= 1; $i++) kmwn> { kmwn> $ttt = "$ttt $ttt[$i]"; kmwn> } kmwn> $ttt = "$ttt, $ttt[2]"; kmwn> return $ttt; kmwn> } kmwn> } kmwn> sub view_type { kmwn> my ($t) = @_; kmwn> $sth = $dbh->prepare("select type_of_records from type_of_rec where id = kmwn> '$t'"); kmwn> $sth->execute; kmwn> my($ttt) = $sth->fetchrow_array; kmwn> return $ttt; kmwn> } kmwn> Теперь собственно вопрос. kmwn> В подпрограмме select_all_alboms есть выделенный блок, который kmwn> собственно и должен печатать тело таблицы kmwn> ___________________________________ kmwn> | АВТОР | Hазвание альбома | запись | kmwn> ------------------------------------- kmwn> Так вот сейчас этим занимается строка kmwn> print Tr(td(\@row)); kmwn> А если ее закомментировать, а блок раскоментировать, то while kmwn> выполняется только ОДИH раз..... ПОЧЕМУ while прекращает работу?? kmwn> При это если убрать в цикле вызов подпрограмм view_auth и view_type kmwn> while отрабатывает... kmwn> Это тем более сранно, что в другом месте скрипта ити самые view_auth kmwn> и view_type отрабатывают нормально.... А база данных-то кто? Hе все поддерживают несколько параллельных запросов у одного хендла. Впрочем, это все фигня, а не фигня - то, что ты в этих процедурах переопределяешь $sth. И чему ты после этого удивляешься? Рано тебе еще скрипты без use strict запускать... -- Счастливо! Ран. --- ifmail v.2.14.os-p7-tma3 * Origin: MemoNet (2:5020/371.32@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/171210a5130a4.html, оценка из 5, голосов 10
|