Database handle problem
am 14.01.2008 12:41:20 von Ervin Peters
Icha habe ein klasse database:
use DBI;
use DBD::Pg;
....
sub new
{
my ( $class, ..) = @_;
..
my $self = {};
bless $self, $class;
$dbh = DBI->connect(..);
$self->{dbh} = $dbh;
}
....
Ich übergebe nun vom Kontrollscript entweder das objekt oder das
Databasehandle an ein anders Klassenobjekt:
main.pl:
my $db = database->new(..);
my $session = mysession->new( $db->{dbh} );
und mache dann was in mysession damit:
mysession:
sub new
{
my ($class, $dbh) = @_;
my $self = { _dbh => $dbh };
bless( $self, $class );
}
sub dosomething
{
my ($self) = @_;
my $sql = ...;
$self->{_dbh}->do($sql);
...
}
Das gibt einen Fehler: Can't call method "do" on an undefined value...
Füge ich vor dem 'do' ein
print "$self->{_dbh}"
ein, kommt das raus:
DBI::db=HASH(0x1251060)
Warum funktioniert das nicht? Was mache ich falsch?
GrüÃe,
ervin
Re: Database handle problem
am 14.01.2008 12:58:25 von Frank Seitz
Ervin Peters wrote:
> $self->{_dbh}->do($sql);
[...]
> Das gibt einen Fehler: Can't call method "do" on an undefined value...
>
> Füge ich vor dem 'do' ein
>
> print "$self->{_dbh}"
>
> ein, kommt das raus:
>
> DBI::db=HASH(0x1251060)
Das kann nicht sein. Perl gibt nicht die Fehlermeldung
"Can't call method on an undefined value", wenn die
Referenz definiert ist.
GrüÃe
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Database handle problem
am 14.01.2008 13:25:26 von Ervin Peters
Am Mon, 14 Jan 2008 12:58:25 +0100 schrieb Frank Seitz:
> Ervin Peters wrote:
>
>> $self->{_dbh}->do($sql);
> [...]
>> Das gibt einen Fehler: Can't call method "do" on an undefined value...
>>
>> Füge ich vor dem 'do' ein
>>
>> print "$self->{_dbh}"
>>
>> ein, kommt das raus:
>>
>> DBI::db=HASH(0x1251060)
>
> Das kann nicht sein. Perl gibt nicht die Fehlermeldung "Can't call
> method on an undefined value", wenn die Referenz definiert ist.
Hast recht, genaugenommen wurde die Funktion wohl 2mal ausgeführt. Einmal
mir gültigem hash, einmal ohne. Der Fehler liegt an anderer Stelle...
Das ganze ist in einen shop script, das im Indianer läuft. Ich habe mal
spasseshalber ein
die "anhalten"
nach der sessioninitialisierung in main eingegeben und bekomme die
Felermeldung jetzt zwei mal. Grmphf, was ist den das nu wieder?
Auch ein Ausgabe per warn erscheint zweimal im log?
ervin
Re: Database handle problem
am 15.01.2008 00:35:50 von obw
Ervin Peters wrote:
> Hast recht, genaugenommen wurde die Funktion wohl 2mal ausgeführt. Einmal
> mir gültigem hash, einmal ohne. Der Fehler liegt an anderer Stelle...
>
> Das ganze ist in einen shop script, das im Indianer läuft. Ich habe mal
> spasseshalber ein
>
> die "anhalten"
>
> nach der sessioninitialisierung in main eingegeben und bekomme die
> Felermeldung jetzt zwei mal. Grmphf, was ist den das nu wieder?
>
> Auch ein Ausgabe per warn erscheint zweimal im log?
Das ganze läuft nicht zufällig unter mod_perl? Stelle mal sicher,
dass dein Kram ein Singleton ist.
OBW
erledigt Re: Database handle problem
am 15.01.2008 07:51:36 von Ervin Peters
Am Mon, 14 Jan 2008 23:35:50 +0000 schrieb Oliver B. Warzecha:
> Ervin Peters wrote:
>> Hast recht, genaugenommen wurde die Funktion wohl 2mal ausgeführt.
>> Einmal mir gültigem hash, einmal ohne. Der Fehler liegt an anderer
>> Stelle...
>>
>> Das ganze ist in einen shop script, das im Indianer läuft. Ich habe mal
>> spasseshalber ein
>>
>> die "anhalten"
>>
>> nach der sessioninitialisierung in main eingegeben und bekomme die
>> Felermeldung jetzt zwei mal. Grmphf, was ist den das nu wieder?
>>
>> Auch ein Ausgabe per warn erscheint zweimal im log?
>
> Das ganze läuft nicht zufällig unter mod_perl? Stelle mal sicher, dass
> dein Kram ein Singleton ist.
>
> OBW
Nein, ich habe im tran an anderer Stelle noch eine Sessionbojekt erzeugt,
wo ich was anderes haben wollte und dort fehlten dann die passende
Aufrufparameter. Layer 9 problem.
ervin