sql >> Database >  >> RDS >> Mysql

Perl:update meerdere rijen met één MySQL-aanroep

Ten eerste en het belangrijkste is dat u variabelen absoluut niet rechtstreeks in uw SQL-strings moet interpoleren. Dat laat de mogelijkheid van SQL-injectie-aanvallen open. Zelfs als die variabelen niet afkomstig zijn van gebruikersinvoer, blijft de mogelijkheid open van gevaarlijke bugs die uw gegevens kunnen verknoeien.

Het MySQL DBD-stuurprogramma ondersteunt meerdere instructies, hoewel het standaard is uitgeschakeld als veiligheidsfunctie. Zie mysql_multi_statements onder de Klasse-methoden sectie in de DBD::mysql-documentatie.

Maar een veel betere oplossing, die beide problemen tegelijk oplost en draagbaarder is, is het gebruik van voorbereide instructies en tijdelijke aanduidingen.

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

Breng uw gegevens vervolgens in een soort lus:

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

U hoeft de verklaring maar één keer voor te bereiden en de waarden van de tijdelijke aanduiding worden vervangen (en gegarandeerd correct geciteerd) door het DBD-stuurprogramma.

Lees meer over tijdelijke aanduidingen in de DBI-documenten .



  1. Een lege database maken in Access 2016

  2. Hoe COLLATION() werkt in MariaDB

  3. Hoe de tabelnaam van sqlite DB weer te geven -- Android

  4. MySQL telt alles buiten de limiet