Database handle problem

Icha habe ein klasse database:

use DBI;
use DBD::Pg;

....

sub new
{
my ( $class, ..) = [at] _;
..
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) = [at] _;
my $self = { _dbh => $dbh };
bless( $self, $class );
}

sub dosomething
{
my ($self) = [at] _;
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
Ervin Peters [ Mo, 14 Januar 2008 12:41 ] [ ID #1907792 ]

Re: Database handle problem

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
Frank Seitz [ Mo, 14 Januar 2008 12:58 ] [ ID #1907793 ]

Re: Database handle problem

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
Ervin Peters [ Mo, 14 Januar 2008 13:25 ] [ ID #1907794 ]

Re: Database handle problem

Ervin Peters <ervin.peters [at] ervnet.de> 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
obw [ Di, 15 Januar 2008 00:35 ] [ ID #1907806 ]

erledigt Re: Database handle problem

Am Mon, 14 Jan 2008 23:35:50 +0000 schrieb Oliver B. Warzecha:

> Ervin Peters <ervin.peters [at] ervnet.de> 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
Ervin Peters [ Di, 15 Januar 2008 07:51 ] [ ID #1908826 ]
Perl » de.comp.lang.perl.misc » Database handle problem

Vorheriges Thema: Win32::Daemon
Nächstes Thema: UTF-8 in Grundbuchstaben umsetzen