Автор Тема: Объекты . . .  (Прочитано 5056 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Объекты . . .
« : 21 Июня 2009, 08:13:59 »
В общем что-то не получается заюзать как следует ООП

Есть такая задача . . . работа с БД . . .

Основной скрипт:

#!/usr/bin/perl

use lib "./pm";

use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use Mysql;

print CGI::header;

my $connect = Mysql->new();
my $db_h = $connect->connect();

$connect->execute_query("DROP TABLE aaa");

----------------- Mysql.pm

package Mysql;

sub new {
   my $check = shift;
   my $class = ref( $check ) || $check;
   my $self = {};
   bless($self, $class);
   return $self;
}

sub connect {
   my $self = shift;
   my $query_setcharset = shift;

   my $SQL_DATABASE = "wiw_test";
   my $SQL_HOSTNAME = "localhost";
   my $SQL_PORT = "3306";
   my $SQL_USER = "wiw_test";
   my $SQL_PASSWORD = "123";

   $self->{dbh} = DBI->connect("DBI:mysql:database=$SQL_DATABASE;host=$SQL_HOSTNAME;port=$SQL_PORT", $SQL_USER, $SQL_PASSWORD) || die ($DBI::errstr);

   $query_setcharset = $self->{dbh}->prepare("SET NAMES cp1251");
   $query_setcharset->execute();
   $query_setcharset->finish();
}
sub disconnect {
   my $self = shift;
   $self->disconnect() || die $DBI::errstr;
}

sub execute_query {
   my $self = shift;
   my $query = shift;

   print "$self , $query";
   
   my $query = $self->prepare($query);
   $query->execute();
}

1;

Коннект проходит нормально, объект создается.
При попытке сделать запрос - выдает ошибку, что метод prepare не найден

при попытке сделать дисконнет - перл вообще вываливается . . .

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Объекты . . .
« Ответ #1 : 23 Июня 2009, 11:00:48 »
$self->{\'dbh\'}->prepare (...)

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Объекты . . .
« Ответ #2 : 23 Июня 2009, 11:57:04 »
Уже разобрался ...

Вот ещё такой вопрос . . .

В пакете есть пара функций

формата
sub func1 {
my $selft = shift
my $ret = "";

далее например:
$ret->{1} = 123;
$ret->{2} = 333;
return $ret;
}

sub func2 {
my $selft = shift
my $ret = "";

далее например:
$ret->{1} = 555;
$ret->{2} = 777;
return $ret;
}

# функций несоклько и заполняют данные по разному

если вызвать их
$a1 = Main->func1();
$a2 = Main->func2();

то в $a1 будет $a2 . . . а если помеять $ret на индивидуальный в каждой функции, то не переписывается ...

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Объекты . . .
« Ответ #3 : 23 Июня 2009, 12:27:28 »
не понял вопроса.

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Объекты . . .
« Ответ #4 : 23 Июня 2009, 12:59:44 »
При вызове двух различных функций переписывается знаечение переменной, причем если поменять в теле функции $ret на разные, то не переписывается . . . в чем может быть проблема?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Объекты . . .
« Ответ #5 : 23 Июня 2009, 13:13:38 »
my $ret = {};

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Объекты . . .
« Ответ #6 : 23 Июня 2009, 13:22:11 »
Спасибо :-)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28