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?