Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6612[/thread]

Problem bei Objekten in Klassenvariablen



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Gast Gast
 2005-01-05 23:36
#50597 #50597
Hi,

ich baue gerade eine kleine Klasse, die mit dem DBI Modul die Verbindung meiner Seite zu einer Datenbank verwalten soll.

Dabei wollte ich den Rückgabewert von DBI->connect in einer Klassenvariablen speichern. Das Speichern klappt auch soweit, nur wenn ich in einer anderen Methode auf diese Klassenvariable zugreifen möchte kommt die Fehlermeldung:

Can't use string ("mysql") as a HASH ref while "strict refs" in use.

Ich poste noch die relevanten Zeilen des Codes:

der Aufruf des Klassenkonstruktors:
my $db = new mysql(DBI->connect("DBI:mysql:$database",$username,$password));

das Speichern des db-Handels im Konstruktor:
sub new($) {
my ($class,$db) = @_;
my $self = {};
bless $self;
$self->{"db"} = $db;
return $class;
}

nun noch die den Fehler erzeugende Zeile:
return $self->{"db"}->prepare($query);

Ich weiss echt nicht mehr weiter, das muss doch gehen Traurig

Vielen Dank für die Hilfe,
Michael
esskar
 2005-01-06 00:00
#50598 #50598
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
fast richtig

Code: (dl )
1
2
3
4
5
6
7
8
sub new
{
  my ($class,$db) = @_;
  my $self = {};
  bless $self, $class;
  $self->{db} = $db;
  return $self;
}


wie fu siehst, brauchst du auch nicht $self->{"db"} zu schreiben; $self->{db} reicht völlig!

PS: Willkommen bei der Perl-Community!\n\n

<!--EDIT|esskar|1104962456-->
m1chaeL-
 2005-01-06 00:05
#50599 #50599
User since
2005-01-06
5 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke für die Antwort,

ich habe es geändert aber die Fehlermeldung bleibt :(.

Aber noch eine kleine Frage zu deiner Antwort reicht es $self->{db} zu schreiben oder ist $self->{"db"} auch richtig?

Michael

P.S.: Danke :)
Quem te Deus esse Jussit et humana qua parte locatus es in re, Disce
esskar
 2005-01-06 00:12
#50600 #50600
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
es geht beides...

wie sieht den die funktion um

Code: (dl )
return $self->{"db"}->prepare($query);


aus ?
m1chaeL-
 2005-01-06 00:13
#50601 #50601
User since
2005-01-06
5 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
sub _prepare($) {
my ($self,$query) = @_;
return $self->{db}->prepare($query);
} # end private method
Quem te Deus esse Jussit et humana qua parte locatus es in re, Disce
esskar
 2005-01-06 00:20
#50602 #50602
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
und du rufst es dann wirklich so auf?
Code: (dl )
1
2
my $db = new mysql(DBI->connect("DBI:mysql:$database",$username,$password));
$db->_prepare("SELECT * FROM table WHERE id = ?");


auf?\n\n

<!--EDIT|esskar|1104963646-->
m1chaeL-
 2005-01-06 00:23
#50603 #50603
User since
2005-01-06
5 Artikel
BenutzerIn
[Homepage] [default_avatar]
jaein,

ich rufe es aus einer anderen Methode heraus auf:

Code: (dl )
1
2
3
4
5
6
sub query($) {
my ($self,$query) = @_;
$self->{"query"} = $self->_prepare($query);
$self->_execute;
return 1;
} # end public method


Ich habe geprüft, ob der übergebene String wirklich richtig ist.

Michael

P.S.: Zumindest bin ich erleichtert, dass es kein super-dummer Fehler ist. Habe schon an mir gezweifelt...

# edit

ich habe die beiden Dateien mal als txt auf meinen Webspace geladen:

www.toao.org/test.txt (die aufrufende Datei)
www.toao.org/mysql.txt\n\n

<!--EDIT|m1chaeL-|1104964009-->
Quem te Deus esse Jussit et humana qua parte locatus es in re, Disce
esskar
 2005-01-06 00:27
#50604 #50604
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wenn du
Code: (dl )
1
2
3
4
5
6
7
sub query($) {
   my ($self,$query) = @_;
   print "$self\n" and return 1;
   $self->{"query"} = $self->_prepare($query);
   $self->_execute;
   return 1;
} # end public method


änderst und dann mysql auf der console steht, hast du was falsch gemacht - sprich; du hast die new sub doch noch falsch; gibt new wirklich $self zurück?\n\n

<!--EDIT|esskar|1104964056-->
esskar
 2005-01-06 00:29
#50605 #50605
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ha; laut www.toao.org/mysql.txt hast du deiner new sub gar nix geändert ... :) genau schauen bitte! !!!
m1chaeL-
 2005-01-06 00:31
#50606 #50606
User since
2005-01-06
5 Artikel
BenutzerIn
[Homepage] [default_avatar]
Schande über mich und vielen Dank an dich. Ich hatte das return $self gar nicht beachtet, da ich nicht dachte da könnte der Fehler liegen.
Nochmals vielen Dank. Und es war doch wieder ein dummer Fehler *gg*.

Warum klappt es manchmal (bei einfachen Datentypen) auch mit dem return $class?

Michael
Quem te Deus esse Jussit et humana qua parte locatus es in re, Disce
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2005-01-05 23:36.