SQL injection e por que prepared statements resolvem
Pergunta
Como um ataque de SQL injection acontece, e por que usar prepared statements (queries parametrizadas) o previne?
Resposta esperada
A injeção acontece quando entrada do usuário é concatenada dentro do texto da query, então um valor como `'; DROP TABLE users; --` deixa de ser dado e vira comando. Prepared statements separam o comando dos dados: o driver envia primeiro a query com placeholders (`WHERE email = $1`) e depois os valores, que o banco trata sempre como dados literais, nunca como SQL — não importa o que tenha dentro. Escapar manualmente é frágil (encoding, casos de borda); parametrizar é a defesa correta. ORMs geralmente parametrizam por baixo, mas 'raw queries' com interpolação de string reabrem o buraco.
Por que perguntam isso
Pergunta básica e obrigatória pra backend. Resposta fraca diz 'sanitizar a entrada'; resposta certa é 'parametrizar' e sabe explicar por que a separação comando/dados fecha a classe inteira do ataque.