Thread Perl DBI DBD::MySQL Abfrage Problem (19 answers)
Opened by gmafx at 2009-11-19 16:49

sid burn
 2009-11-20 10:43
#128359 #128359
User since
2006-03-29
1520 articles
BenutzerIn

user image
Hier die Standard-Dinge:
* Shebang ist "#!/usr/bin/env perl" besser.
* Nutze im Connect Aufruf "RaiseError" => 1
* Wenn man nicht Plant Transaktionen zu nutzen oder gar nicht erst weiß was das ist sollte man noch die Option "AutoCommit" => 1 hinzufügen.
* Bei SQL Selects sollte man kein "*" nutzen

Keine Ahnung warum absolut jeder RaiseError weg lässt, aber wenn man "RaiseError => 1" als Option hinzufügt dann überprüft DBI immer selber ob Fehler aufgetreten sind und bricht automatisch mit einem "die()" aufruf ab.

Das spart einiges an Tipparbeit, macht Sourcecode übersichtlicher, weil Fehlerbehandlung vom korrekt laufenden Code getrennt wird, und reduziert den Fehler das man die Fehlerbehandlung vergessen kann.

Code (perl): (dl )
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
#!/usr/bin/env perl
use strict;
use warnings;
use DBI;

my $database     = "dbname";
my $host         = "localhost";
my $user         = "username";
my $pw           = "pw";
my $searchstring = "ein in Spalte 1 vorkommender Wert";
my $dsn          = "dbi:mysql:$database:localhost:3306";
my $options      = { RaiseError => 1, AutoCommit => 1 };
my $dbh          = DBI->connect($dsn, $user, $pw, $options);

# Man sollte direkt spaltenwerte nutzen kein "*"
my $sql = 'select column1,column2 from dbname where value1 = ?';
my $sth = $dbh->prepare($query);
my $rv  = $dbh->execute($searchstring);

# bind_columns war schon korrekt...
my ( $column1, $column2 );
$sth->bind_columns(\$column1, \$column2);

while( $sth->fetch ) {
    print "COLUMN1: $column1  COLUMN2: $column2\n";
} 


EDIT: bind_columns() aufruf korregiert nach hinweis von renee
Last edited: 2009-11-20 12:20:33 +0100 (CET)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Perl DBI DBD::MySQL Abfrage Problem