Forum Webscript.Ru

Программирование => Perl => Тема начата: DartSidius от 21 Июня 2009, 08:13:59

Название: Объекты . . .
Отправлено: DartSidius от 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 от 23 Июня 2009, 11:00:48
$self->{\'dbh\'}->prepare (...)
Название: Объекты . . .
Отправлено: DartSidius от 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 от 23 Июня 2009, 12:27:28
не понял вопроса.
Название: Объекты . . .
Отправлено: DartSidius от 23 Июня 2009, 12:59:44
При вызове двух различных функций переписывается знаечение переменной, причем если поменять в теле функции $ret на разные, то не переписывается . . . в чем может быть проблема?
Название: Объекты . . .
Отправлено: arto от 23 Июня 2009, 13:13:38
my $ret = {};
Название: Объекты . . .
Отправлено: DartSidius от 23 Июня 2009, 13:22:11
Спасибо :-)