perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 19
Click for quality!




12.02.2012 / 03:44

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDatenbank 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

Beitragre: 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

BeitragDanke, 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

Beitragre: 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

Beitragre: 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

Beitragre: Danke, funktioniert
Seitenanfang
Nu das war jetzt ein Missverständnis, das ist meine Signatur.

-uw

Datum: 12.05.2006-14:37

BeitragZum 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

Beitragre: Zum Thema Datenbankzugriff
Seitenanfang
Ok, danke!
ich werde mir das mal anshen.

Datum: 12.05.2006-16:13

-






-
-