En parcourant certains livres sur le SQL, j'ai remarqué que les exemples ont tendance à utiliser des points d'interrogation (?
) dans leurs requêtes. Que représente-t-il?
Pouvez-vous fournir un exemple de ceci ?
En parcourant certains livres sur le SQL, j'ai remarqué que les exemples ont tendance à utiliser des points d'interrogation (?
) dans leurs requêtes. Que représente-t-il?
Vous êtes en train de voir une requête paramétrée. Elles sont fréquemment utilisées lors de l'exécution de SQL dynamique à partir d'un programme.
Par exemple, au lieu d'écrire ceci (note : pseudocode):
ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = 7")
result = cmd.Execute()
Vous écrivez ceci :
ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = ?")
cmd.Parameters.Add(7)
result = cmd.Execute()
Cela présente de nombreux avantages, comme c'est probablement évident. L'un des plus importants : les fonctions de bibliothèque qui analysent vos paramètres sont intelligentes, et assurent que les chaînes sont correctement échappées. Par exemple, si vous écrivez ceci :
string s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')"
cmd.Execute()
Que se passe-t-il lorsque l'utilisateur entre ceci ?
Robert'); DROP TABLE students; --
(La réponse se trouve ici)
Écrivez ceci à la place :
s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE name = ?"
cmd.Parameters.Add(s)
cmd.Execute()
Ensuite, la bibliothèque va sanitiser l'entrée, produisant ceci :
"SELECT * FROM students where name = 'Robert'); DROP TABLE students; --'"
Tous les SGBD n'utilisent pas de ?
. MS SQL utilise des paramètres nommés, ce que je considère comme une grande amélioration :
cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"
cmd.Parameters.AddWithValue("@varname", 7)
result = cmd.Execute()
Le ?
est un paramètre sans nom qui peut être renseigné par un programme exécutant la requête pour éviter les injections SQL.
Le ?
est utilisé pour permettre une Requête Paramétrée. Ces requêtes paramétrées permettent d'utiliser des valeurs spécifiques au type lors du remplacement du ?
par leur valeur respective.
C'est tout ce qu'il y a à dire à ce sujet.
Il y a plusieurs raisons pour lesquelles il est recommandé d'utiliser des Requêtes Paramétrées. En essence, c'est plus facile à lire et à déboguer, et cela contourne les attaques par injection SQL.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Pouvez-vous fournir le code pour la requête ?
0 votes
Je suppose que ce sont des variables dans les déclarations préparées, mais vous devriez poster cette requête particulière pour être sûr.