Bonjour,
Ce n'est pas tant la requête préparée qui est importante, mais le fait de contrôler les données transmises par l'utilisateur.
Dans la logique, la requête préparée ne devrait servir que lorsque tu exécutes plusieurs fois la même requête de façon consécutives avec des valeurs différentes (ex : insertions ou mises à jour en masse, exécution de la requête dans une boucle, ...). Le gain de temps et de ressources est alors notable sur de gros volumes de requêtes.
Lorsque tu utilises PDO, ce dernier va implicitement protéger toutes les valeurs transmises à la requête préparée. C'est pourquoi beaucoup de gens l'utilisent ou recommandes PDO, même pour des requêtes simples qui ne seront exécutées qu'une fois dans le code.
Le contrôle des données transmises et la protection des injections sql évoqué par xTG est primordiale, car sans cela un utilisateur malintentionné pourrait en cherchant un peu, accéder à des données confidentielles de ton site (identifiants, mots de passe, ...).
Pour reprendre l'exemple et la requête donnés plus haut :
'SELECT name, colour, calories FROM fruit WHERE calories < ' . $_POST['calories']
Dans une logique fonctionnelle, $_POST['calories'] devrait contenir un nombre (saisie ou sélectionné dans ton formulaire) et tout fonctionnera bien. Dans la pratique, s'il s'agit d'un champ de saisie libre (mais ça marche avec n'importe quel type de champ si on bricole le html), il suffit à l'utilisateur de rentrer une valeur du type : " 250 UNION SELECT username, password, id FROM users " pour que la requête SQL exécutée devienne
SELECT name, colour, calories FROM fruit WHERE calories < 250
UNION
SELECT username as name, password as colour, id as calories FROM users
et retourne effectivement tous les éléments inférieurs à 250 ca, mais également la liste des identifiants et des mots de passes de la table users... Et si ça ne marche pas car la table ou la colonne n'existe pas, il suffit de changer le nom de la table et/ou des champs jusqu'à ce que ça fonctionne (et on peut même demander à un robot d'essayer des combinaison jusqu'à trouver les bonnes valeurs

)
En contrôlant que la valeur de $_POST['calories'] est bien un nombre avant de l'envoyer dans ta requête, tu t'épargnes ce genre de problème. De la même manière, avec les chaines de caractères, si tu ne contrôles pas la présence d'apostrophes ou de guillemets, l'utilisateur peut ainsi compléter ta requête et disposer d'un accès à ta base de données et peut être plus
