sql >> Databasteknik >  >> RDS >> Mysql

Perl:Uppdatera flera rader med ett MySQL-anrop

Först och främst bör du absolut inte interpolera variabler direkt i dina SQL-strängar. Det lämnar möjligheten för SQL-injektionsattacker öppen. Även om dessa variabler inte kommer från användarinmatning, lämnar det möjligheten öppen för farliga buggar som kan förstöra din data.

MySQL DBD-drivrutinen stöder flera uttalanden, även om den är avstängd som standard som en säkerhetsfunktion. Se mysql_multi_statements under Klassmetoder avsnitt i DBD::mysql-dokumentationen.

Men en mycket bättre lösning, som löser båda problemen på en gång och är mer portabel, är att använda förberedda uttalanden och platshållarvärden.

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

Få sedan dina data i en slinga av något slag:

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

Du behöver bara förbereda uttalandet en gång, och platshållarvärdena ersätts (och garanteras korrekt citerade) av DBD-drivrutinen.

Läs mer om platshållare i DBI-dokumenten .



  1. mysql, ändra kolumn ta bort primärnyckel och automatisk inkrementering

  2. Använder du mysql-databas för att autentisera användare i Spring Security?

  3. Hur man installerar SQL Server på en Mac med VirtualBox

  4. Föreslå webbhotell för Java i Windows-miljö