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

Perl:Opdater flere rækker med ét MySQL-kald

For det første og vigtigst bør du absolut ikke interpolere variabler direkte i dine SQL-strenge. Det efterlader muligheden for SQL-injektionsangreb åben. Selvom disse variabler ikke kommer fra brugerinput, åbner det muligheden for farlige fejl, der kan ødelægge dine data.

MySQL DBD-driveren understøtter flere udsagn, selvom den er slået fra som standard som en sikkerhedsfunktion. Se mysql_multi_statements under Klassemetoder afsnittet i DBD::mysql-dokumentationen.

Men en meget bedre løsning, som løser begge problemer på én gang og er mere bærbar, er at bruge forberedte udsagn og pladsholderværdier.

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

Få derefter dine data i en slags loop:

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

Du behøver kun at forberede erklæringen én gang, og pladsholderværdierne erstattes (og er garanteret korrekt citeret) af DBD-driveren.

Læs mere om pladsholdere i DBI-dokumenterne .



  1. Sådan installeres og sikres MariaDB 10 i CentOS 6

  2. Gå i dvale ved at slutte sig til to tabeller og producere json-svar i foråret afslappende webservice?

  3. Vælg og rediger lodrette blokke i SQL Server Management Studio ( SSMS) - SQL Server / TSQL selvstudium del 9

  4. Sådan sikkerhedskopieres en krypteret database med Percona Server til MySQL 8.0