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

Consultas parametrizadas de MySQL

Tenga cuidado con el uso de la interpolación de cadenas para consultas SQL, ya que no escapará correctamente de los parámetros de entrada y dejará su aplicación abierta a vulnerabilidades de inyección SQL. La diferencia puede parecer trivial, pero en realidad es enorme .

Incorrecto (con problemas de seguridad)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))

Correcto (con escape)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))

Se suma a la confusión que los modificadores utilizados para vincular parámetros en una instrucción SQL varían entre diferentes implementaciones de API de base de datos y que la biblioteca del cliente mysql usa printf sintaxis de estilo en lugar de la más comúnmente aceptada '?' marcador (utilizado por ejemplo, python-sqlite ).