|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Datenbank Login mit DBI >> kleines Problem
|
Seitenanfang |
| Hi, ich stehe noch relativ am Anfang in Perl, habe mich ein wenig in die basics eingearbeitet und HTML Seiten generiert. Jetzt möchte ich das mit Datenbanken verknüpfen, stehe aber noch ganz am Anfang mit Per im Zusammenhant zu MySQL. Ich versuche mich also folgendermaßen einzuloggen: #! /usr/bin/perl -w use strict; use CGI; use DBI; &connect; sub connect{ $dbh = DBI->connect("DBI:mysql:dwTest", "user", "passwort") || die "Database connection not made: $DBI::errstr"; $dbh->disconnect(); } Nur leider funktioniert das ganze nicht, in den 2 Zeilen mit $dbh am anfang bekomme ich immer die Meldung: Global symbol "$dbh" requires explicit package name at ./gaestebuch.plx Würde mich freuen, wenn mir jemand helfen kann! Ein Tutorial habe ich hier gefunden: http://www.infos24.de/perle/handbuch/22_dbi_modul.htm Dort wird es ja eigentlich genauso gemacht.
Datum: 12.05.2006-11:02

|
re: Datenbank Login mit DBI >> kleines Problem
|
Seitenanfang |
| Hallo, da Du use strict verwendest, muss $dbh vorher deklariert sein : my $dbh;
Datum: 12.05.2006-11:43

|
Danke, funktioniert
|
Seitenanfang |
| Ok, vielen Dank für den Hinweis, es funktioniert nun, zumindest kommen keine Fehler mehr. In einem pm File, das ich gefunden habe, hat jemand folgende Login prozedur entwickelt: sub connect($){ my ($invocant) = shift; $invocant->{"dbh"} = DBI->connect("dbi:mysql:$invocant->{db}", $invocant->{"user"}, $invocant->{"pwd"}) or die "Can not connect to database"; } Ich verstehe das nur nicht so recht, es steht doch nirgends das PW und der Username als Variable, oder das richtige Passwort, im File steht das genauso im Code wie ich es hier gepostet habe. Und was bedeutet das ($) hinter sub connect ? Wenn man sein PW und Username nicht umbedingt im Script stehen haben möchte, kann man da etwas dagegen tun? Wie hoch ist die warscheinlichkeit dass irgendjemand im Internet diese plx Datei öffnet und einfach das Passwort sieht, bei meiner Methode?
Datum: 12.05.2006-12:00

|
re: Danke, funktioniert
|
Seitenanfang |
| Hi, das Dollarzeichen in der Funktionsdeklaration ist mir auch schleierhaft. So etwas habe ich noch nicht gesehen. DB-Name, User und Passwort jedenfalls, werden als Hash-Referenz an die Sub übergeben. Beispiel:
Package Connect;sub new { my $obj = shift; my $ref = {}; bless ($ref, $obj); return($ref); } sub connect { my ($invocant) = shift; $invocant->{"dbh"} = DBI->connect("dbi:mysql:$invocant->{db}", $invocant->{"user"}, $invocant->{"pwd"}) or die "Can not connect to database"; } sub query { #Anweisungsblock } sub disconnect { #Anweisungsblock } 1;
Und jetzt der Funktionsaufruf dazu:
#!/usr/bin/perl require 5.006; use strict; use warnings; use diagnostics; use CGI qw/:standard/; use CGI qw/fatalsToBrowser warningsToBrowser/; use DBI; use DBD::mysql; use Connect;my $db_connect = Connect->new(); my %db_data = ( dbh => undef, db => "datenbank", user => "benutzer", pwd => "passwort" ); $db_connect->connect( \%db_data );
Somit erzeugt die Subfunktion nicht intern, sondern im aufrufenden Skript. Un da können sie dann auch benutz werden.Übrigens, das Flag -w ist noch ein Überbleibsel aus alten Tagen, dafür gibt es jetzt das Pragma warnings und diagnostics. -uw
Datum: 12.05.2006-13:26

|
re: Danke, funktioniert
|
Seitenanfang |
| Danke für den Tip mit -uw, habe bis jetzt überall nur -w gelesen. Ich konnte zwar auch nicht allzuviel mit deiner Erklärung anfangen, aber ich bin sicher nach ein paar Stunden Übung gelingt mir das auch noch. Bis jetzt fand ich alle Perl Tutorials sehr gut, übersichtlich u. schnell zu lernen. Dieser Datenbank zugriff macht mir aber doch ein wenig zu schaffen, sieht sehr ungewohnt aus alles und eine gute Erklärung habe ich noch nicht so richtig dazu gefunden.
Datum: 12.05.2006-14:19

|
re: Danke, funktioniert
|
Seitenanfang |
| Nu das war jetzt ein Missverständnis, das ist meine Signatur. -uw
Datum: 12.05.2006-14:37

|
Zum Thema Datenbankzugriff
|
Seitenanfang |
| So, nochmal an anderer Stelle, damit wir nicht durcheinander kommen. Unter Perl wird der Datenbankzugriff über das Modul DBI geregelt. Dies stellt die meisten funtionen zur Verfügung, die im Zwischenspiel Skript/DB gebraucht werden. Im nächsten Schritt ist dann entscheidend, ob der Zugriff auf MySQL oder PostgreSQL erfolgen soll. Die speziellen Datenbanktreiber stellen dann DBD::Pg (Postgres) und DDB::mysql (MySQL) zur Verfügung. Ein paar Links: http://search.cpan.org/search?query=DBI&mode=all http://search.cpan.org/search?query=DBD&mode=all Im speziellen für Dich: http://search.cpan.org/search?query=DBD%3A%3Amysql&mode=all -uw
Datum: 12.05.2006-14:44

|
re: Zum Thema Datenbankzugriff
|
Seitenanfang |
Ok, danke! ich werde mir das mal anshen.
Datum: 12.05.2006-16:13

|
|

|

|

|
 |

|

|
|