Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Зависает - помогите понять в чем проблема


Автор: trigger 3.12.2006, 22:15
привожу часть кода

Код

sub show_list_user{
print "Cписок&nbsp;&nbsp;<a href=./contact_add.cgi>Добавляем контакт</a><hr><br>";
    my $row;
    my @list_group=("начальство","заместители","бренд-менеджеры","техники","менеджеры","другое");
    my $item;
    foreach $item (@list_group) {
    get_person_list($item); 
    }
}



sub get_person_list{
    my $item=shift;
    my $row;
    my $stmt = (qq {SELECT * FROM persons WHERE corp_position = '$item' ORDER BY last_name});
    $sth = $dbh->prepare($stmt);
    $sth -> execute ();
    $sth ->finish();        
    if ($sth -> execute ()!= 0) {
        print "<h3><font color=red>$item</font></h3>";
        print "<table border=0 width=100% cellpadding=3 cellspacing=3><tr bgcolor=lightblue>
        <td bgcolor=#990000 width=1> </td>
        <td width=20%>ФИО</td>
        <td><IMG SRC=/images/spacer.gif  border=0 width=15 height=1></td>
        <td width=10%>Компания</td>
        <td width=10%>Телефон</td>
        <td width=10%>Профессия</td>
        <td  width=30%>Вкусы</td>
        <td  width=20%>Связи</td><td> </td>
        </tr>";

            while ($row = $sth->fetchrow_hashref())
                    {
                    my ($day,$month,$year,$email,$icq);
                    # даты 
                    if (($day=$row->{b_day}) eq "день") {$day="";} else{$day=$day;}
                    if (($month=$row->{b_month}) eq "месяц"){$month="";} else{$month=$month;}
                    if (($year=$row->{b_year}) eq "год"){$year=""} else{$year=$year;}
                    my $data=qq(<div class=time>$day  $month  $year</div>);
        
                    # редактировать - удалить
                    my $edit_url = sprintf ("%s?choice=edit;id=%d", url (), $row->{id});
                    my $delete_url = sprintf ("%s?choice=delete;id=%d", url (), $row->{id});
        
                    # почта
                    if ($email=$row->{e_mail}){$email=qq(<a href=mailto:$row->{e_mail}><IMG SRC=/images/email.gif alt=$row->{e_mail} title=$row->{e_mail} border=0></a>);} else{$email="";}        
                    if ($icq=$row->{icq}){$icq=qq(<IMG SRC=/images/icq.gif alt=$row->{icq} title=$row->{icq} border=0>);} else{$icq="";}
        
                        print   "<tr bgcolor=#E1E1E1>
                        <td>",checkbox(),"</td>
                        <td>$data $row->{last_name}<br>$row->{first_name} $row->{sub_last_name}</td>
                        <td align=center>$email<br><br>$icq</td>
                        <td>$row->{company}</td>
                        <td>$row->{phone}<br>$row->{phone_mob}</td>
                        <td>$row->{proff_list}</td>
                        <td>$row->{taste}</td><td>$row->{communication}</td>
                        <td nowrap>",       a ({-href => $edit_url}, "<IMG SRC=/images/edit.gif alt=редактировать title=редактировать border=0 hspace=3>"),
                                            a ({-href => $delete_url}, "<IMG SRC=/images/del.gif alt=удалить title=удалить border=0 hspace=3>"),"</td></tr>";
                        
                    }
        print "</table>";
        print "<br>";
           
        }
    else {print "&nbsp;&nbsp;&nbsp;список <i>$item</i> пуст <br>";}


}

Автор: korob2001 4.12.2006, 00:43
Код

$sth -> execute ();
    $sth ->finish();        
    if ($sth -> execute ()!= 0) {
       #.........
    }

Попробуй сделать так:
Код

my $res = $sth->execute();
$res += 0;
if ($res) {
    #........
}
$sth->finish();

Автор: trigger 5.12.2006, 13:08
хм... не помогает

решил - руки кривые smile

Автор: Phoinix 5.12.2006, 17:59
trigger

Да уж... код кривоват...

А что пишет ErrorLog?

korob2001

Не вижу смысла второго execute()... Скорее все-таки так:

Код

#...

$sth->execute() || die $DBI::errstr;
my $rows = $sth->rows();
if ($rows && $rows > 0) {
    while (my $row = $sth->fetchrow_hashref) {
        #...
    }
} else {
    #...
}
$sth->finish();
#...


Автор: korob2001 5.12.2006, 18:12
Цитата(Phoinix @  5.12.2006,  14:59 Найти цитируемый пост)
Не вижу смысла второго execute()... Скорее все-таки так:

Да нет в моём коде  втого execute, в том-то и дело.;)))

Автор: Phoinix 5.12.2006, 18:15
korob2001

Упс... сорри... не обратил внимание...
Но все же результат execute() не вернет тебе все что нужно...

Автор: korob2001 5.12.2006, 18:45
Если execute выполнится успешно, вернёт кол-во выбранных полей, в противном случае строку 0E0, если же была ошибка в запросе, например был указан не существующий столбец, то вернёт undef.

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