199 votes

déclaration « où 1 = 1 »

<blockquote> <p><strong>Doublon possible :</strong><br> <a href="http://stackoverflow.com/questions/242822/why-would-someone-use-where-1-1-and-conditions-in-a-sql-clause">Pourquoi quelqu'un utiliser WHERE 1 = 1 < conditions > dans une clause SQL ?</a> </p> <p>J’ai vu des gens utiliser une instruction pour interroger une table dans une base de données MySQL comme suit :</p><pre><code></code></pre><p>Mais que signifie <code></code> veux dire ici ?</p></blockquote>

315voto

gbn Points 197263

C’est généralement quand les gens accumulent des instructions SQL.

Lorsque vous ajoutez des `` vous n’avez pas à vous soucier de savoir s’il existe une condition avant ou juste lorsque. L’optimiseur doit l’ignorer

Pas de magie, juste pratique


Exemple de Code :

Dans le cas contraire, vous devrez disposer d’un ensemble complexe de logique :

49voto

Rubens Farias Points 33357

Si cette requête est construite dynamiquement, auteur original probablement ne veut pas envisager un ensemble de conditions, vide donc se termine par quelque chose comme ceci :

37voto

Jon Egerton Points 16192

1=1 sera toujours vrai, donc le value="TOYOTA" bits est le plus important.

Vous obtenez ceci dans quelques scénarios, y compris:

SQL généré: Il est plus facile de créer un générer un complexe where si vous n'avez pas à travailler si vous êtes en train d'ajouter la condition première ou pas, si souvent un 1=1 est à mettre au début, et toutes les autres conditions peuvent être ajoutées avec un And

Débogage: Parfois, vous voyez les gens mettent en 1=1 au sommet d'une condition where, comme il leur permet de librement hacher et changer le reste des conditions lors du débogage d'une requête. par exemple

select * from car_table
where 1=1
--and value="TOYOTA"
AND color="BLUE"
--AND wheels=4

Il faut dire qu'il n'est pas particulièrement bonnes pratiques et, normalement, ne devrait pas se produire dans le code de production. Il peut même ne pas aider à l'optimisation de la requête beaucoup.

31voto

Jeff Foster Points 22175

Ainsi que toutes les autres réponses, c’est une technique simple pour les attaques par injection SQL. Si vous ajoutez un `` déclaration pour certains codes SQL, alors il va retourner tous les résultats en raison de la truthiness inhérente de l’expression.

16voto

Udo Held Points 6488

C'est juste une expression toujours vraie. Certaines personnes l'utilisent comme une solution de rechange.

Ils ont une déclaration statique comme:

 select * from car_table where 1=1
 

Donc, ils peuvent maintenant ajouter quelque chose à la clause where avec

 and someother filter
 

Prograide.com

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.

Powered by:

X