par
Genova » 17 août 2015, 18:11
La version non protégée c'est de faire quelque chose comme ça :
$pdo->prepare('SELECT * FROM table WHERE id = '.$_GET['id']);
Parce qu'il est possible, si ta variable est mal protégée, de faire de l'injection SQL (avec l'exemple ci dessus, il suffit de mettre du SQL dans l'URL pour créer une injection).
En fait le but des requêtes préparées à la base n'est pas lié à la sécurité. L'intérêt de ces requêtes c'est que c'est un tout petit plus performant si tu utilises plusieurs fois de suite la même requête, en changeant simplement le paramètre.
Le côté sécurisé est un petit plus dont on aurait tort de se priver. Il n'y a pas d'injection SQL possible en utilisant les paramètres.
Les paramètres nommés du genre :nomDuParametre ont l'intérêt comme leur nom l'indique d'être nommé, donc ensuite il te suffit de faire ça :
$stmt->execute([
':nomDuParametre' => 42,
]);
Alors que les paramètres avec un "?", comme ils ne sont pas nommés, doivent être assignés dans le même ordre que celui de la requête. Bref en gros n'utilise pas les "?", ça n'a aucun avantage par rapport aux paramètres nommés
