Pourquoi quelqu'un mettrait-il «où 1 = 1» dans une requête?


18

Je suis tombé sur une vue dans notre base de données aujourd'hui où se trouvait la première déclaration de la clause where where 1 = 1. Cela ne devrait-il pas être vrai pour chaque album? Pourquoi est-ce que quelqu'un écrirait ceci s'il ne filtre aucun enregistrement?



3
Parce qu'ils veulent pirater le site Web de sombodys ;-)
Tim Schmelter

Réponses:


40

Certains constructeurs de requêtes dynamiques incluent cette condition afin que toutes les conditions "réelles" puissent être ajoutées avec un ANDsans effectuer de vérification comme if (first condition) 'WHERE' else 'AND'.


Il semble étrange qu'un générateur de requêtes ne puisse pas déterminer si une condition est la première d'une ligne, mais je pense également que vous avez raison.
ern0

3
c'est souvent le cas lorsque le "générateur de requêtes" est une personne qui écrit du code à concaténer manuellement sur l'instruction SQL. l'introduction d'une bibliothèque de création de requêtes plus formelle l'élimine parfois.
araqnid

1
J'ai dû faire face à un "ancien" code comme celui-ci, et c'est très vrai. Lorsque vous assemblez l'intégralité de l'instruction SQL en une seule chaîne, des groupes d'instructions if / then ou case peuvent se déclencher ou non. Parce que vous ne savez jamais si l'un de ces chemins de code est pris, MAIS vous avez un AND incorporé dans votre clause WHERE (en raison d'une clause qui fait toujours partie de la chaîne), vous devez soit (a) supprimer le AND incriminé ou ( b) lui transmettre simplement un truisme logique. L'ajout de "1 = 1" est plus facile que la rédaction correcte de la chaîne.
Avery Payne

5

Si votre programme contient de nombreux points de construction d'instructions SQL qui génèrent des requêtes similaires , vous pouvez marquer celui examiné par cette astuce. Si la phrase concerne le comptage, vous pouvez utiliser le code ci-dessous afin de pouvoir extraire 42un journal SQL.

select count(42) from table

4

Il fournit une situation qui est toujours vraie, donc cela n'affecte pas les résultats, mais vous savez qu'il y a déjà un élément dans la clause WHERE.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.