Mysql
 sql >> база данни >  >> RDS >> Mysql

Perl:Актуализирайте няколко реда с едно извикване на MySQL

Първо и най-важно, абсолютно не трябва да интерполирате променливи директно във вашите SQL низове. Това оставя отворена възможността за атаки с инжектиране на SQL. Дори ако тези променливи не идват от въвеждане на потребителя, това оставя отворена възможността за опасни грешки, които могат да прецакат данните ви.

MySQL DBD драйверът поддържа множество изрази, въпреки че е изключен по подразбиране като функция за безопасност. Вижте mysql_multi_statements под Методи на клас раздел в документацията на DBD::mysql.

Но много по-добро решение, което решава и двата проблема наведнъж и е по-преносимо, е да се използват подготвени изрази и стойности за място.

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

След това изведете данните си в някакъв цикъл:

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

Трябва да подготвите изявлението само веднъж, а стойностите на заместителя се заменят (и гарантирано, че ще бъдат правилно цитирани) от DBD драйвера.

Прочетете повече за заместителите в 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. Вземете оставащите дни, часове и минути с помощта на mySql

  2. Защо дължината на реда AVG е 4 пъти по-голяма от очакваното?

  3. Каква е разликата между MySQL и MySQL2 предвид NodeJS

  4. MySQL в docker-compose -- достъпът е отказан

  5. Възможно ли е да се направи групово копиране в mysql