Hi!
Hier die Standard-Dinge:
* Hast du strict und warnings an?
* Werte alle möglichen Fehlerquellen aus (z.B. auch die beim connect).
*
Du benutzt bind, hast aber keine Platzhalter definiert. edit: das (mein Kommentar) ist Unsinn.
Hier mal eine Überarbeitung (ungetestet), probier die mal aus. Da werden mehr Fehler abgefangen und außerdem wird Quoting verwendet, d.h. der Wert, den du in der WHERE-Klausel prüfst, kann keine unsicheren Zeichen / Befehle enthalten.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Data::Dumper qw/Dumper/;
my $database = "dbname";
my $host = "localhost";
my $user = "username";
my $pw = "pw";
my $searchstring = "ein in Spalte 1 vorkommender Wert"; # hier muss ein ; hin
my $dsn = "dbi:mysql:$database:localhost:3306";
# was ist mit den Attributen?
my $dbh = DBI->connect($dsn, $user, $pw) or die("err connect: " . DBI->errstr());
my $sql = 'select * from dbname where value1 = ?';
my $sth = $dbh->prepare($query) or die("err prep: " . DBI->errstr());
# hier werden die Werte eingefügt, die für die Platzhalter eingefügt werden sollen.
# du hast 1 Platzhalter, also übergibst du 1 Wert.
my $rv = $dbh->execute($searchstring) or die("err exec: " . DBI->errstr());
# rv kann man auswerten, muss man aber nicht (wird nicht von allen Datenbanken unterstützt).
while( my $arrayref = $sth->fetchrow_arrayref() ) {
# du machst ein print OUTPUT, aber was ist OUTPUT? Ein Datei-Handle?
# die Konsole ist glaube ich STDOUT
print Dumper $arrayref; # Data::Dumper ist cool!
}
Selbstverständlich sind die Fehlermeldungen nur Andeutungen. Ausformulieren musst du die schon selbst :)
Last edited: 2009-11-20 12:13:27 +0100 (CET)