Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Perl:Aktualisieren Sie mehrere Zeilen mit einem MySQL-Aufruf

Erstens und am wichtigsten ist, dass Sie Variablen auf keinen Fall direkt in Ihre SQL-Strings interpolieren sollten. Das lässt die Möglichkeit von SQL-Injection-Angriffen offen. Selbst wenn diese Variablen nicht aus Benutzereingaben stammen, bleibt die Möglichkeit gefährlicher Fehler offen, die Ihre Daten vermasseln können.

Der MySQL-DBD-Treiber unterstützt mehrere Anweisungen, obwohl er als Sicherheitsfunktion standardmäßig deaktiviert ist. Siehe mysql_multi_statements unter den Klassenmethoden Abschnitt in der DBD::mysql-Dokumentation.

Aber eine viel bessere Lösung, die beide Probleme gleichzeitig löst und besser portierbar ist, ist die Verwendung vorbereiteter Anweisungen und Platzhalterwerte.

my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");

Bringen Sie dann Ihre Daten in eine Art Schleife:

while( $whatever) { 
    my ( $EC, $MR, $EM ) = get_the_data();
    $sth->execute( $EC, $MR, $EM );
}

Sie müssen die Anweisung nur einmal vorbereiten, und die Platzhalterwerte werden durch den DBD-Treiber ersetzt (und garantiert korrekt in Anführungszeichen gesetzt).

Lesen Sie mehr über Platzhalter in der DBI-Dokumentation .