Leser: 25
![]() |
|< 1 2 3 >| | ![]() |
21 Einträge, 3 Seiten |
2010-02-05T17:02:10 GwenDragon* Verwende use strict; und use warnings;
Quote* Verwende bei Abfragen Platzhalter, das verhindert SQL-Injections
Quote* Schließe möglichst früh wieder das Datenbankhandle, wenn du es nicht brauchst, das kann Resourcen sparen
Quote* Überprüfe selbst, ob die Datenbankabfragen geklappt haben mit or die DBI::errstr;, dann erscheinen sie nicht in deinen Ausgaben
2010-02-05T17:25:24 sid burnOh, ja.Quote* Schließe möglichst früh wieder das Datenbankhandle, wenn du es nicht brauchst, das kann Resourcen sparen
Wobei der Tipp vom der Umgebung abhängt. In einer Persistenten Umgebung wäre das für mich zumindest eher ein schlechter Tipp.
QuoteTeilweise gebe ich dir Recht.Quote* Überprüfe selbst, ob die Datenbankabfragen geklappt haben mit or die DBI::errstr;, dann erscheinen sie nicht in deinen Ausgaben
Hier lautet mein Tipp eher "RaiseError => 1" bei den DBI Optionen zu übergeben, dann wirft DBI bei Problemen selber Fehler, man kann es nicht vergessen, und es ist weniger Tipparbeit.
QuoteEs kommt wohl drauf an wieviele Leute am SQL-Server hängen. Da kann es schon mal zu viele Connects geben. Oder täusche ich mich bei den heutigen MySQL-Servern?
QuoteTeilweise gebe ich dir Recht. Es kommt immer drauf an, ob die Meldungen nur zur Analyse verwendet werden, das Programm beenden zu lassen bei Problemen gewünscht ist oder selbst eine verständliche Meldung ausgeben werden soll.
1 2 3 4 5 6 7 8 9 10 11 12
eval { $sth->prepare(...); $sth->execute(...); $sth->prepare(...); $sth->execute(...); $sth->prepare(...); $sth->execute(...); }; if ( $@ ) { warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen" # ... weitere fehlerbehanldung }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
$sth->prepare(...) or do { warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen" # ... weitere fehlerbehanldung }; $sth->execute(...) or do { warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen" # ... weitere fehlerbehanldung }; $sth->prepare(...) or do { warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen" # ... weitere fehlerbehanldung }; $sth->execute(...) or do { warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen" # ... weitere fehlerbehanldung }; $sth->prepare(...) or do { warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen" # ... weitere fehlerbehanldung }; $sth->execute(...) or do { warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen" # ... weitere fehlerbehanldung };
QuoteKommt eben auf die Benutzeroberfläche an, welche Datenbank abfragt bzw. durch diese mit Daten versorgt wird.
1 2 3 4 5 6 7 8 9 10
my $dbh = db_open(); my $id = ''; ## //Wird durch Param übergeben ... my $sql = "SELECT id,name,text FROM test WHERE id=$id"; my $allref = $dbh->selectall_arrayref($sql, { Slice=>[] }); foreach my $test (@$allref) { $htc->param( homename => $test->[1], home => $test->[2] ); } $dbh->disconnect();
1 2 3 4 5 6 7 8 9 10 11
my $dbh = db_open(); my $id = ''; ## //Wird durch Param übergeben ... my $stmt = q~SELECT id,name,text FROM test WHERE id=?~; my $sth = $dbh->prepare( $stmt ) or die $dbh->errstr; $sth->execute($id) or die $dbh->errstr; while(my $row = $sth->fetchrow_hashref() ) { $htc->param( homename => $row->{'name'}, home => $row->{'text'} ); } $dbh->disconnect();
1 2 3 4 5 6 7 8
sub db_open { my $db = 'test'; my $host = 'localhost'; my $user = 'test'; my $pw = '123456'; my $dsn = "DBI:mysql:database=$db;host=$host"; my $opt = { RaiseError => 1, AutoCommit => 1 }; my $dbh = DBI->connect($dsn, $user, $pw, $opt); return $dbh; }
![]() |
|< 1 2 3 >| | ![]() |
21 Einträge, 3 Seiten |