sql >> Databáze >  >> RDS >> Mysql

Perl:Aktualizujte více řádků jedním voláním MySQL

Za prvé a nejdůležitější, absolutně byste neměli interpolovat proměnné přímo do vašich SQL řetězců. To ponechává otevřenou možnost útoků SQL injection. I když tyto proměnné nepocházejí z uživatelského vstupu, ponechává otevřenou možnost nebezpečných chyb, které mohou zničit vaše data.

Ovladač MySQL DBD podporuje více příkazů, i když je ve výchozím nastavení jako bezpečnostní funkce vypnutý. Viz mysql_multi_statements pod Třídní metody sekce v dokumentaci DBD::mysql.

Mnohem lepším řešením, které řeší oba problémy najednou a je přenosnější, je ale použití připravených příkazů a zástupných hodnot.

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

Poté uveďte svá data do nějaké smyčky:

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

Příkaz stačí připravit pouze jednou a zástupné hodnoty jsou nahrazeny (a zaručeno, že budou správně citovány) ovladačem DBD.

Další informace o zástupných symbolech naleznete v dokumentech DBI .



  1. Vytvořte zobrazení v SQL Server 2017

  2. Jak uložíte výsledek dotazu MySQL do proměnné v c

  3. Chyba syntaxe při použití oddělovačů s Aurora Serverless MySQL 5.6

  4. Spuštění/spuštění MySQL bez instalace na Windows