Thread MySQL: Wie funktioniert UPDATE und INSERT mit Perl
(20 answers)
Opened by Gast at 2008-01-13 18:07
1. & vor Funktionsaufrufen ist eigentlich unnötig.
2. Lies dir in der DBI-Doku mal die Punkte zum Thema Platzhalter durch. Deine Statements sind in der jetzigen Form anfällig für SQL-Injection, da die Daten ohne vorheriges Escaping übernommen werden! Besser wäre sowas: Code (perl): (dl
)
1 2 my $sql = "UPDATE portalsides SET ps_mainside=? WHERE ps_id=?"; $dbh->do($sql, undef, $mainside, $id) or die("Daten konnte nicht gespeichert werden. $DBI::errstr"); Das undef bei do() wird benötigt, da do() an zweiter Stelle normal einen Hash erwartet. Wenn du Platzhalter benutzt, übernimmt das DBI-Modul bzw. das dahinterliegende datenbankspezifische Modul das nötige Escaping von Werten. 3. Statt Code (perl): (dl
)
1 2 3 4 my $allref = $dbh->selectall_arrayref($sth, { Slice=>[] }); foreach my $psides (@$allref) { $html{'home'} .= $psides->[1]; } könntest du auch eine while-Schleife mit fetchrow_arrayref() benutzen. Vorteil hierbei ist, dass du die Daten nicht komplett in den Speicher holen musst, bevor du sie weiter verarbeitest, 4. Code (perl): (dl
)
my $sth = $dbh->prepare("$sql") or die($dbh->errstr); Hier musst du $sql nicht mit Anführungszeichen versehen. Einfach direkt übergeben reicht auch. |