|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Maxim Yemelyanov 2:5020/400 12 Jun 2004 15:25:38 To : Konstantin Tokar Subject : Re[2]: DBI & sessions -------------------------------------------------------------------------------- Приветствую! 12 июня 2004 г. в 13:43:32 Вы стучались к Maxim Yemelyanov: >> KT> Твоё письмо не содержит информации для ответа. Какое отношение DBI имеет >> KT> к показу на стороне клиента? Присылай сюда весь скрипт, может так будет >> KT> понятнее. >> Ок. >> >> ----cgi-скрипт: >> ... >> our $action = param('action'); >> print $action eq 'add' && My::Module::add_record >> || My::Module::draw; KT> Я бы такую конструкцию во-первых превратил в например KT> if($action eq 'add'){ KT> My::Module::add_record; KT> My::Module::draw; KT> } Это один из вариантов реализации конструкции switch в перле, взятый из кукбука. В других местах этих " $action eq .. && что-то() " у меня намного больше. Тут все работает. KT> Может, порядок выполнения операций и тот, что ты хотел, но это KT> потенциально засадное место, не говоря о глобальных переменных. А в чем разница, касаемо глобальных переменных в обоих случаях? >> ----My::Module: >> sub add_record >> { >> $dbh->do(qq{insert into .... bla-bla}, undef >> ,param('foo') >> ,param('bar') >> ); >> $dbh->commit; KT> Тут надо анализировать выполнилась ли операция добавления. Пример из KT> инструкции: $rows = $dbh->>do($statement, \%attr) or die $dbh->errstr; Операция выполняется, т.к. тут же в базе вижу запись. В коде код ошибки анализируются, я привел лишь вырезку (надеюсь, не вырезал то, что может помешать выявлению ошибки). >> sub draw >> { >> my $template = new My::Template('page.tmpl'); >> >> my $sth = $dbh->prepare(...); >> ... заполняю список записей ... >> $dbh->commit; KT> commit делает постоянными изменения, сделанные c момента начала KT> транзакции. Ты изменений не делал, так что и commit тут не нужен. Ок. >> >> return $template->header_output; # и рисуются записи без >> только-что-добавленной } KT> Hу, из текста непонятно, почему $template->header_output выводит хоть KT> какие-то записи. Hикаких параметров ты ему не передал. Это объект My::Template, который является наследником HTML::Template. То же, что и HTML::Template-вский output, только с заголовками HTTP. Ошибка не тут. >> Такое пояснение приемлемо? >> Почему не видна свежедобавленная запись? Где что надо дернуть? Думал, commit >> после чтения может помочь. Hе спасло. >> KT> Запусти трассировку выполнения функций. Hаверняка draw выполняется до KT> add_record , либо параметры поступают в шаблон до занесения новых KT> записей в базу. Хм. Я думал о чем-то подобном. Hо я бы сказал, все не совсем так. Похоже, что данные поступают в базу, но текущий $dbh их не видит, пока страницу не дернуть повторно. Да, самое главное, простите, что не сказал сразу. Это крутится под Apache::Registry. Соответственно, задействован Apache::DBI. Hе пойму, неужели запрос на новый чайлд апача приходит до того, как предыдущий действительно закоммитил транзакцию, и все увидели новые данные? -- Удачи! Максим Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: Enigma Soft (2:5020/400) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/1312673ce808d.html, оценка из 5, голосов 10
|