hallo leute, ich mach grad ein wenig gehversuche mit perl und dql. es gibt ja die tollen dbi-module mit denen man sql locker ansprechen kann. wenn ich nun z.b. folgendes konstrukt haben will: lies die datensätze einer tabelle ein und zähle für jeden datensatz eins auf eine countervariable drauf, so hab ich mir folgendes zusammengebastelt: my $sth = $dbh->prepare("SELECT * FROM foo"); $sth->execute(); while (my $ref = $sth->fetchrow_hashref()) { $count++; } $newcount = ($count + 1); print "Der nächste Zähler wäre $newcount\n\n"; $sth->finish(); das sieht für mich ja eigentlich perfekt aus, jedoch bekomm ich auf der shell, wenn ich das prog ausführe folgenden fehler: Global symbol "$count" requires explicit package name at test.cgi line 36. Global symbol "$newcount" requires explicit package name at test.cgi line 37. kann mir jemand sagen oder kurz erklären, wie ich innerhalb der konstrukte von DBI mit normalen variablen umgehen kann? das wäre für mich äusserst interessant. ach zur info: die tabelle kann schön geöffnet werden wenn ich z.b. folgende syntax anwende: my $sth = $dbh->prepare("SELECT * FROM foo"); $sth->execute(); while (my $ref = $sth->fetchrow_hashref()) { print "Zeile gefunden: id = $ref->{'id'}, name = $ref->{'name'}<br>\n"; } $sth->finish(); da printet mir das script schön alle daten auf die ausgabe. zeile für zeile. aber wie gesagt, ich wollte gerne auch mit anderen, selbstdefinierten variablen arbeiten. danke dan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Dan Sepeur wrote on Thu, Oct 05, 2000 at 19:12 +0200:
es gibt ja die tollen dbi-module mit denen man sql locker ansprechen kann.
Ja, sogar DBI::ODBC, was mit unixODBC (www.unixodbc.org) läuft :)
lies die datensätze einer tabelle ein und zähle für jeden datensatz eins auf eine countervariable drauf, so hab ich mir folgendes zusammengebastelt:
my $count = 0; #declaration needed if -w set my $newcount = 0;
my $sth = $dbh->prepare("SELECT * FROM foo"); $sth->execute(); while (my $ref = $sth->fetchrow_hashref()) { $count++; } $newcount = ($count + 1); print "Der nächste Zähler wäre $newcount\n\n"; $sth->finish();
Warum eigentlich nicht "select count(*) from foo"? Bestimmt schneller ;)
Global symbol "$count" requires explicit package name at test.cgi line 36.
also my davor, dann ist sie nicht global, sondern lokal (aber nicht mir local verwechseln ;))
kann mir jemand sagen oder kurz erklären, wie ich innerhalb der konstrukte von DBI mit normalen variablen umgehen kann? das wäre für mich äusserst interessant.
Na: my $sth = $dbh->prepare("SELECT * FROM $tab"); oder my $sth = $dbh->prepare(snprintf("SELECT %s FROM %s"), $fields, $tab); oder beliebig komplizierter ;) oki, Steffen -- Dieses Schreiben wurde maschinell erstellt, es trägt daher weder Unterschrift noch Siegel. --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
steffen, :-)
* Dan Sepeur wrote on Thu, Oct 05, 2000 at 19:12 +0200:
es gibt ja die tollen dbi-module mit denen man sql locker ansprechen kann.
Ja, sogar DBI::ODBC, was mit unixODBC (www.unixodbc.org) läuft :)
ohjooooo .... im moment hab ich eh zu kämpfen ohne ende. muss erst mal verdauen, was da alles möglich ist und mir die ganzen möglichkeiten mal reinziehen ... abgefahren :-)
my $count = 0; #declaration needed if -w set my $newcount = 0;
my $sth = $dbh->prepare("SELECT * FROM foo"); $sth->execute(); while (my $ref = $sth->fetchrow_hashref()) { $count++; } $newcount = ($count + 1); print "Der nächste Zähler wäre $newcount\n\n"; $sth->finish();
Warum eigentlich nicht "select count(*) from foo"? Bestimmt schneller ;)
na ganz einfach. weil ich bis dahin noch nix von select count (*) wusste :-) ich glaub ich häng mich mal inne mailingliste für DBI für dummies und bücher hab ich wohl auch schon bestellt. schitt newbies, was? :-)
Global symbol "$count" requires explicit package name at test.cgi line 36.
also my davor, dann ist sie nicht global, sondern lokal (aber nicht mir local verwechseln ;))
chon klar :-)))))) mit perl selbst hab ich schon was länger zu tun.
my $sth = $dbh->prepare("SELECT * FROM $tab"); oder my $sth = $dbh->prepare(snprintf("SELECT %s FROM %s"), $fields, $tab);
oder beliebig komplizierter ;)
ARGS .... das sieht wirklich schlimm aus :-) he he okese dan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
my $sth = $dbh->prepare("SELECT * FROM foo"); $sth->execute(); while (my $ref = $sth->fetchrow_hashref()) { $count++; } $newcount = ($count + 1); print "Der nächste Zähler wäre $newcount\n\n"; $sth->finish();
das sieht für mich ja eigentlich perfekt aus, jedoch bekomm ich auf der shell, wenn ich das prog ausführe folgenden fehler:
Global symbol "$count" requires explicit package name at test.cgi
From: "Dan Sepeur"
Global symbol "$newcount" requires explicit package name at test.cgi line 37.
Ich glaube, daß ist kein SQL/DBI-Fehler... irgendwo wird bestimmt "use strict;" geladen, die Variablen $count und $newcount müssen dann mit "my" oder "local" initalisiert werden. -- Marco Dieckhoff icq# 22243433 PGP key 9EFA D64F 5DAA D36B E0E7 CE1B 9E1B 4903 0C51 1632 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Marco Dieckhoff schrieb in 1,0K (38 Zeilen):
Global symbol "$count" requires explicit package name at test.cgi
From: "Dan Sepeur"
line 36.
Ich glaube, daß ist kein SQL/DBI-Fehler... irgendwo wird bestimmt "use strict;" geladen, die Variablen $count und $newcount müssen dann mit "my" oder "local" initalisiert werden.
Also: my $my_var Variable wird nicht in die Tabellen eingetragen und ist lexikalisch lokal. local $::Meine_Variable Variable ist lokal, wird in die Variablen-Tabellen eingetragen (und ist somit etwas langsamer) $::GLOBAL_WICHTIGE_VARIABLE_FUER_WHATEVER ist global. ub a { my $v1 = "v1 in sub a gesetzt"; print "\$v1 in sub a == $v1\n"; &b; &c; sub b { print "\$v1 in sub b == $v1\n"; }; } sub c { print "\$v1 in sub c == $v1\n"; }; &a; Und dann das ganze nochmal nach sed -e 's/$v1/$::v1/g' -e 's/my /local /' -Wolfgang --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (4)
-
linux@jwr.de
-
mlists@sternentor.net
-
steffen@dett.de
-
weissel@netcologne.de