Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consultas parametrizadas do MySQL


Cuidado ao usar interpolação de string para consultas SQL, pois ela não escapará dos parâmetros de entrada corretamente e deixará seu aplicativo aberto a vulnerabilidades de injeção de SQL. A diferença pode parecer trivial, mas na realidade é enorme .

Incorreto (com problemas de segurança)

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

Correto (com escape)

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

Isso aumenta a confusão de que os modificadores usados ​​para vincular parâmetros em uma instrução SQL variam entre diferentes implementações de API de banco de dados e que a biblioteca cliente mysql usa printf sintaxe de estilo em vez do mais comumente aceito '?' marcador (usado, por exemplo, python-sqlite ).