Database handle problem

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