Avatar ·

Como prevenir SQL injection em PHP? (guia completo)

Olá a todos! Sou um desenvolvedor PHP iniciante e tive um sério problema de segurança. Estou escrevendo um formulário de login simples para um site, e meu código se parece com isso: ```php $username = $_POST['username']; $password = $_POST['password']; $query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; $result = mysqli_query($conn, $query); ``` Eu sei que isso é terrivelmente inseguro, mas não entendo como corrigir isso corretamente. Amigos disseram que posso ser hackeado via SQL injection. Tentei inserir algo como `admin' OR '1'='1` no campo de login, e de fato — fui autorizado no sistema sem senha! Li sobre `mysqli_real_escape_string()`, mas ouvi dizer que não é uma panaceia. Também falam sobre PDO e prepared statements, mas não entendo como usá-los corretamente. Meu projeto roda em PHP 8.1 com MySQL. Por favor, explique detalhadamente: 1. Como exatamente funciona o SQL injection? 2. Quais são as formas modernas de proteção? 3. Qual método é considerado a melhor prática?