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


Автор: ilya9339 7.2.2012, 17:52
Решил написать форум, ниже изложена функция которая печатает сообщения в теме.


Код

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() не пашет.
Прошу помочь, извиняюсь за многобукоф.

Автор: arto 7.2.2012, 18:03
$db->prepare("SELECT id_user, user FROM user") or die $db->errstr;

Автор: ilya9339 7.2.2012, 18:53
Спасибо, помогло.
Как оказалась я два раза подряд объявил тип одной и той же переменной, уже в глазах от них рябит, не заметил...

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