Решил написать форум, ниже изложена функция которая печатает сообщения в теме. | Код | sub print_topic { my ($id_section, $id_topic) = @_; my $ds = 'DBI:mysql:'.$DATA{'DB'}.':'.$DATA{'HOST'}; my $db = DBI->connect($ds, $DATA{'LOGIN'}, $DATA{'PASSW'}); if (!$db) { print "connect-type: text/html\n\n"; print "Ошибка ДБ"; exit(); } $db->do("SET NAMES utf8");
my $topic_names_get = $db->prepare("SELECT id_user, name, status FROM topic_names WHERE id_topic=$id_topic"); $topic_names_get->execute(); if (!$topic_names_get->err){ my @topic_names = $topic_names_get->fetchrow_array(); $topic_names_get->finish();
my $section_names_get = $db->prepare("SELECT name FROM section_names WHERE id_section=$id_section"); $section_names_get->execute(); if (!$section_names_get->err) { my $section_names = $section_names_get->fetchrow_array(); $section_names_get->finish(); my @id_user; my @user; my $count = 0; my $all_user_get = $db->prepare("SELECT id_user, user FROM user"); my $all_user_get->execute(); if (!$all_user_get->err){ while (my @user_take = $all_user_get->fetchrow_array()) { $id_user[$count] = $user_take[$count]; $user[$count] = $user_take[$count+1]; } $all_user_get->finish(); $db->disconnect;
my $ds2 = 'DBI:mysql:'.$DATA{'DB2'}.':'.$DATA{'HOST'}; my $db2 = DBI->connect($ds2, $DATA{'LOGIN'}, $DATA{'PASSW'}); if (!$db2) { print "connect-type: text/html\n\n"; print "Ошибка ДБ2"; exit(); } $db2->do("SET NAMES utf8"); my $topic_get = $db2->prepare("SELECT * FROM topic$id_topic"); $topic_get->execute(); if (!$topic_get->err) { while (my @topic = $topic_get->fetchrow_array()) { if ($topic[3] eq "v"){ my @mass = split(/\n/, $topic[2]); print "<p>\n<table class=\"msg\">\n"; print "<tr><td class=\"msg\">\n"; print "<div class=\"dialog-round\"><span class=\"d1\"></span><span class=\"d2\"></span><span class=\"d3\"></span><div>"; print "<p class=\"msg\">\n"; foreach my $var (@mass) { print $var."<br>\n"; } print "</p>\n"; print "</div><span class=\"d3\"></span><span class=\"d2\"></span><span class=\"d1\"></span></div>"; print "</td></tr>\n<tr><td class=\"aboute\">\n"; print "<div class=\"dialog-round\"><span class=\"d1\"></span><span class=\"d2\"></span><span class=\"d3\"></span><div>"; print "<table class=\"writer\">\n<tr><td class=\"writer\">Автор:"; my $nik; for ($nik=0;$nik<@id_user;$nik++){ if ($id_user[$nik] == $topic[1]) { print $user[$nik]; last; } } print "</td>\n"; if ($user[$nik] eq cookie("loginn")) { &action_change_form ($topic[3]); } print "<td class=\"data\"> Дата: $topic[4]</td></tr>\n</table>\n"; print "</div><span class=\"d3\"></span><span class=\"d2\"></span><span class=\"d1\"></span></div>"; print "</td></tr>\n"; print "</table>\n</p>\n"; } } } else { print "Ошибка выборки сообщений юзеров"; exit(); } } else { print "Ошибка выборки сообщений темы"; exit(); } } else { print "Ошибка выборки из section_names"; exit(); } } else { print "Ошибка выборки топика из topic_names"; exit(); } }
|
Вроде бы написано все правильно но серв выругивается на запрос: | Код | my $all_user_get = $db->prepare("SELECT id_user, user FROM user"); my $all_user_get->execute();
|
| Код | msg.pl: Can't call method "execute" on an undefined value at Z:/home/mytry.ru/lib/Forum.pm line 375., referer: http://mytry.ru/cgi-bin/book.pl?section=1
|
Вроде бы все правильно, в упор ошибки не вижу, пред идущие два запроса выполняет нормально, если SQL запрос выполняю через phpmyadmin выборка нормально работает, а execute() не пашет. Прошу помочь, извиняюсь за многобукоф.
|