Seules les instructions préparées fournissent un échappement automatique, en supposant que vous n'avez pas activé certaines choses comme les guillemets magiques. Et seules les données des paramètres sont échappées, pas tout ce qui se trouve déjà dans la chaîne SQL lorsque vous préparez l'instruction.
Si vous souhaitez bénéficier des avantages de l'échappement automatique, vous devrez préparer un relevé et lui fournir les données séparément.
$sth = $dbh->prepare("SELECT * FROM users WHERE username=? AND password=?");
$sth->execute(array($username, $password));
Sinon, vous obtenez peu ou pas de protection sur mysqli_query
et amis. (Je refuse même de mentionner mysql_query
, car plus aucun programmeur PHP qui se respecte ne l'utilise. Oh, attends..merde. Eh bien, c'est la seule mention qu'il obtient ici.)