Mysql
 sql >> Database >  >> RDS >> Mysql

Perl:aggiorna più righe con una chiamata MySQL

Primo e più importante, non dovresti assolutamente interpolare le variabili direttamente nelle tue stringhe SQL. Ciò lascia aperta la possibilità di attacchi di SQL injection. Anche se tali variabili non provengono dall'input dell'utente, lascia aperta la possibilità di bug pericolosi che possono rovinare i tuoi dati.

Il driver MySQL DBD supporta più istruzioni, sebbene sia disattivato per impostazione predefinita come funzionalità di sicurezza. Vedi mysql_multi_statements sotto i Metodi di classe sezione nella documentazione DBD::mysql.

Ma una soluzione molto migliore, che risolve entrambi i problemi contemporaneamente ed è più portabile, consiste nell'utilizzare istruzioni preparate e valori segnaposto.

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

Quindi, ottieni i tuoi dati in un ciclo di qualche tipo:

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

Devi solo preparare l'istruzione una volta e i valori dei segnaposto vengono sostituiti (e garantiti per essere citati correttamente) dal driver DBD.

Maggiori informazioni sui segnaposto nei documenti DBI .