Thread „MySQL: Wie funktioniert UPDATE“ und „INSERT“ mit Perl (20 answers)
Opened by Gast at 2008-01-13 18:07

nepos
 2008-01-17 15:23
#104836 #104836
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
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.

View full thread „MySQL: Wie funktioniert UPDATE“ und „INSERT“ mit Perl