Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Perl:Zaktualizuj wiele wierszy za pomocą jednego wywołania MySQL

Po pierwsze i najważniejsze, absolutnie nie należy interpolować zmiennych bezpośrednio do łańcuchów SQL. To pozostawia otwartą możliwość ataków typu SQL injection. Nawet jeśli te zmienne nie pochodzą z danych wejściowych użytkownika, pozostawia to otwartą możliwość niebezpiecznych błędów, które mogą zepsuć twoje dane.

Sterownik MySQL DBD obsługuje wiele instrukcji, chociaż jest domyślnie wyłączony jako funkcja bezpieczeństwa. Zobacz mysql_multi_statements pod Metody klas w dokumentacji DBD::mysql.

Ale znacznie lepszym rozwiązaniem, które rozwiązuje oba problemy jednocześnie i jest bardziej przenośne, jest użycie przygotowanych instrukcji i wartości zastępczych.

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

Następnie umieść swoje dane w jakiejś pętli:

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

Wystarczy przygotować instrukcję tylko raz, a wartości zastępcze są zastępowane (i gwarantowane, że są prawidłowo cytowane) przez sterownik DBD.

Przeczytaj więcej o symbolach zastępczych w dokumentacji DBI .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw rekord, jeśli nie istnieje bez klucza Unique

  2. rejestrowanie szczegółowości mysql 5.7

  3. Jak zainstalować MySQL na CentOS 7?

  4. Docker Compose import mysql .sql

  5. Meteor z mysql