Thread Perl DBI DBD::MySQL Abfrage Problem
(19 answers)
Opened by gmafx at 2009-11-19 16:49
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
|