Comment prévenir les injections SQL en PHP ? (guide complet)
Bonjour à tous ! Je suis un développeur PHP débutant et j'ai un sérieux problème de sécurité. J'écris un simple formulaire de connexion sur un site, et mon code ressemble à ceci :
```php
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $query);
```
Je sais que c'est terriblement dangereux, mais je ne comprends pas comment le corriger correctement. Des amis m'ont dit que je pouvais être piraté via une injection SQL. J'ai essayé de saisir dans le champ login quelque chose comme `admin' OR '1'='1`, et effectivement — cela m'a laissé entrer dans le système sans mot de passe !
J'ai lu sur `mysqli_real_escape_string()`, mais j'ai entendu dire que ce n'est pas une panacée. On parle aussi de PDO et des prepared statements, mais je ne comprends pas comment les utiliser correctement. Mon projet tourne sur PHP 8.1 avec MySQL.
S'il vous plaît, expliquez en détail :
1. Comment fonctionne exactement une injection SQL ?
2. Quelles sont les méthodes de protection modernes ?
3. Quelle méthode est considérée comme la meilleure pratique ?