Forum Webscript.Ru
Программирование => Perl => Тема начата: 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 не найден
при попытке сделать дисконнет - перл вообще вываливается . . .
-
$self->{\'dbh\'}->prepare (...)
-
Уже разобрался ...
Вот ещё такой вопрос . . .
В пакете есть пара функций
формата
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 на индивидуальный в каждой функции, то не переписывается ...
-
не понял вопроса.
-
При вызове двух различных функций переписывается знаечение переменной, причем если поменять в теле функции $ret на разные, то не переписывается . . . в чем может быть проблема?
-
my $ret = {};
-
Спасибо :-)