कोई व्यक्ति क्वेरी में `1 = 1` क्यों डालेगा?


18

मुझे आज हमारे डेटाबेस में एक दृश्य दिखाई दिया, जहां क्लॉज में पहला बयान था where 1 = 1। क्या यह हर रिकॉर्ड के लिए सही नहीं होना चाहिए? अगर कोई रिकॉर्ड नहीं छान रहा है तो कोई इसे क्यों लिखेगा?


यहाँ उत्तर दिया गया: dba.stackexchange.com/questions/667/…
Gaius

3
क्योंकि वे sombodys वेबसाइट को हैक करना चाहते हैं ;-)
टिम श्मेल्टर

जवाबों:


40

कुछ डायनेमिक क्वेरी बिल्डरों में यह स्थिति शामिल होती है ताकि कोई भी ANDचेक किए बिना "वास्तविक" शर्तों को जोड़ा जा सके if (first condition) 'WHERE' else 'AND'


यह अजीब लगता है कि एक क्वेरी बिल्डर घर का निर्धारण नहीं कर सकता है एक शर्त एक पंक्ति में पहली है, लेकिन मुझे भी लगता है, आप सही हैं।
ern0

3
यह अक्सर ऐसा होता है जब "क्वेरी बिल्डर" कोई व्यक्ति हाथ से SQL कथन पर संक्षिप्त करने के लिए कोड लिख रहा होता है। कभी-कभी अधिक औपचारिक क्वेरी बिल्डिंग लाइब्रेरी शुरू करने से यह समाप्त हो जाता है।
अरकनिद

1
मुझे इस तरह के "पुराने" कोड से निपटना पड़ा है, और यह बहुत सही है। जब आप पूरे SQL स्टेटमेंट को एक स्ट्रिंग में असेंबल कर रहे होते हैं, तो अगर / या केस स्टेटमेंट्स का गुच्छा होगा जो ट्रिगर हो सकता है या नहीं। क्योंकि आप कभी नहीं जानते हैं कि क्या उन कोड पथों में से कोई भी लिया गया है, लेकिन BUT आपके पास है और आपके WHERE क्लॉज (एक क्लॉज जो लगातार स्ट्रिंग का हिस्सा है) के कारण एम्बेडेड है, आपको या तो (ए) को अपमानजनक या () हटाने की जरूरत है बी) बस इसे एक तार्किक ट्रूइज्म पास करें। "1 = 1" को जोड़ना स्ट्रिंग को सही ढंग से रीड करने से आसान है।
एवरी पायने

5

यदि आपके पास अपने प्रोग्राम में कई SQL स्टेटमेंट बिल्डिंग पॉइंट्स हैं जो समान प्रश्न उत्पन्न करते हैं, तो आप इस ट्रिक द्वारा जांच की गई को चिह्नित कर सकते हैं। यदि वाक्य गिनती के बारे में है, तो आप नीचे दिए गए कोड का उपयोग कर सकते हैं ताकि आप 42SQL लॉग से बाहर निकल सकें ।

select count(42) from table

4

यह एक ऐसी स्थिति प्रदान करता है जो हमेशा सच होती है, इसलिए यह परिणामों को प्रभावित नहीं करता है, लेकिन आप जानते हैं कि WHERE क्लॉज में एक आइटम पहले से ही है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.