Mailinglisten-Archive |
Aloha,
> ----------
> Von: Marcel Tscherkasow[SMTP:marcel.tscherkasow_(at)_mail.uni-oldenburg.de]
>
> Und dieser dbhandle bleibt mir über die Subs nicht erhalten. Ich will
> "dbhandle->quote($newlogin)" beim Erzeugen des SQl-Befehls ausführen. Und
> hier meldet er, dass der dbhandle destroyd wurde ("Last Handle unknown or
> destroyed".
>
> Hier der ,glaub ich relevante, Code:
> my $dbhandle;
>
Hier definierst du $dbhandle als lokale Variable,
> if ($login ne "" && $passwd ne "")
> {
> # Verbindung zur Datenbank herstellen
> $dbhandle = dblogin($adminlogin, $adminpasswd) or die ;
>
Hier wird sie dann nochmal zum Objekt gecastet (gott sei dank geht das in
Perl ;)
du haettest auch schreiben konenen my $dbhandle = dblogin....
> # bis hierhin geht alles gut
> print start_form,
> table({-align=>'center'},
> Tr(
> td({-align=>'center'}, topage("Neuen User anlegen"))
> )
> ),
> end_form;
> }
>
> in einer folgenden Subroutine kommt dann das Quoting, aber da existiert
> der
> DB-Handle schon nicht mehr.
>
In den Subroutinen existieren GENERELL keine Variablen, die im Hauptprogramm
mit my $... angelegt wurden.
Entweder: du laesst den ganzen use strict; my.... krams weg (was schnell ins
Auge
geht...) oder du übergibst deiner Subroutine das Handle, z.b.
tu_dies( $dbhandle, restliche parameter);
definieren tust du die Subroutine dann mit
sub tu_dies {
my $dbhandle = $_[0]; # Heisst jetzt gleich wie das im Hauptprogramm,
ist aber
# nur hier in dieser Subroutine gültig (lokale
Variable)!
my $zweiter_parameter = $_[1];
... usw
}
ODER:
sub tu_dies {
my ( $dbhandle, $zweiter_parameter) = _(at)__; # Ohne gewähr ;-)
... usw
}
genauer stehts in perldoc perlsub , bei den meisten Distributionen
gibts auch eine perlsub.html mit dem gleichen Inhalt :-)
Grüße, Mathias
---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive