sql >> Base de Datos >  >> RDS >> Mysql

Perl:actualice varias filas con una llamada MySQL

Primero y más importante, absolutamente no debe interpolar variables directamente en sus cadenas SQL. Eso deja abierta la posibilidad de ataques de inyección SQL. Incluso si esas variables no provienen de la entrada del usuario, deja abierta la posibilidad de errores peligrosos que pueden estropear sus datos.

El controlador MySQL DBD admite varias declaraciones, aunque está desactivado de forma predeterminada como una función de seguridad. Ver mysql_multi_statements bajo los Métodos de clase sección en la documentación de DBD::mysql.

Pero una solución mucho mejor, que resuelve ambos problemas a la vez y es más portátil, es usar declaraciones preparadas y valores de marcador de posición.

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

Luego, obtenga sus datos en un bucle de algún tipo:

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

Solo necesita preparar la declaración una vez, y los valores de marcador de posición se reemplazan (y se garantiza que se citarán correctamente) por el controlador DBD.

Obtenga más información sobre los marcadores de posición en los documentos de DBI .