2012-02-04 6 views
21

मैंने एक आवेदन पर एक लॉग फ़ाइल में एक क्वेरी चलाया। और इसमें एक क्वेरी शामिल है:आप SQL में WHERE 1 = 0 कथन का उपयोग क्यों करेंगे?

SELECT ID FROM CUST_ATTR49 WHERE 1=0 

ऐसी कोई क्वेरी का उपयोग क्या है जो कुछ भी वापस करने के लिए बाध्य नहीं है?

+2

यह कुछ ओआरएम "फीचर" के आसपास काम करने के लिए एक हैक है। –

+0

आपको ऐसी क्वेरी कहां मिली? –

+0

डुप्लिकेट: http://stackoverflow.com/questions/517107/why-would-a-sql-query-have-where-1-1 – Krumelur

उत्तर

48

इस तरह की एक क्वेरी डेटाबेस को पिंग करने के लिए उपयोग की जा सकती है। खंड:

WHERE 1=0 

सुनिश्चित करता है कि गैर डेटा वापस भेज दिया जाता है, इसलिए कोई सीपीयू प्रभारी, कोई नेटवर्क ट्रैफ़िक या अन्य संसाधनों की खपत।

के लिए इस तरह एक क्वेरी का परीक्षण कर सकते हैं:

  • सर्वर की उपलब्धता
  • CUST_ATTR49 तालिका अस्तित्व
  • आईडी स्तंभ अस्तित्व
  • एक कनेक्शन जिंदा
  • कारण एक ट्रिगर रखते हुए किसी भी परिवर्तन किए बिना आग पंक्तियां
  • गतिशील प्रश्नों में कई या शर्तों का प्रबंधन करें (उदाहरण के लिए WHERE 1=0 OR <condition>)
+0

वाह! उत्तम! धन्यवाद – MozenRath

+1

* एक कनेक्शन जीवित रखना –

+0

ज़रूर! संपादित। धन्यवाद। –

10

एक उपयोगकेस मैं सोच सकता हूं: आपके पास एक फ़िल्टर फ़ॉर्म है जहां आप कोई खोज परिणाम नहीं चाहते हैं। यदि आप कुछ फ़िल्टर निर्दिष्ट करते हैं, तो वे कहां क्लॉज में जोड़े जाते हैं।

या आमतौर पर इसका उपयोग आमतौर पर किया जाता है यदि आपको हाथ से एक एसक्यूएल क्वेरी बनाना है। जैसे आप चाहे जहां खंड खाली है की जाँच नहीं करना चाहते या not..and आप सिर्फ इस तरह सामान जोड़ सकते हैं:

where := "WHERE 0=1" 

if X then where := where + " OR ... " 
if Y then where := where + " OR ... " 

(यदि आप के साथ खंड कनेक्ट या आप 0 = 1 की जरूरत है, अगर आपके पास और आपके पास 1 = 1 है)

+0

में उल्लिखित रूप में अलग-अलग उपयोग किया जाए, वास्तव में कैसे? क्या आप एक उदाहरण प्रदान कर सकते हैं? – MozenRath

+0

ओह। मुझे यह मिलता है, 1 = 1 के लिए आप और 1 = 0 के लिए उपयोग करते हैं या आप OR का उपयोग करते हैं। अच्छा! धन्यवाद – MozenRath

-2

ऐसा लगता है कि कोई आपके डेटाबेस को हैक करने का प्रयास कर रहा है। ऐसा लगता है कि किसी ने MySQL इंजेक्शन की कोशिश की। आप यहाँ इसके बारे में अधिक पढ़ सकते हैं: Mysql Injection

2

ग्रेग

से उद्धृत

की स्थिति की सूची संकलन समय पर ज्ञात नहीं है और इसके बजाय रन टाइम पर बनाया है, तो आप के बारे में चिंता करने की जरूरत नहीं चाहे आपके पास या एक से अधिक स्थितियां हों। आप उत्पन्न कर सकते हैं उन सब की तरह:

और

और उन सब को एक साथ जोड़। शुरुआत में 1 = 1 के साथ, आरंभिक और इसके साथ संबद्ध करने के लिए कुछ है।

मैंने इसे कभी भी इंजेक्शन सुरक्षा के लिए उपयोग नहीं किया है, क्योंकि आप कहते हैं कि ऐसा लगता है कि इससे अधिक मदद मिलेगी। मैंने इसे कार्यान्वयन सुविधा के रूप में उपयोग किया है। एसक्यूएल क्वेरी इंजन को 1 = 1 को अनदेखा कर देगा, इसलिए इसका कोई प्रदर्शन प्रभाव नहीं होना चाहिए।

Why would someone use WHERE 1=1 AND <conditions> in a SQL clause?

+0

मैंने पढ़ा है लेकिन डिन सोचते हैं कि या 1 = 0 के मामले में इस्तेमाल किया जाएगा जब तक मुझे इस प्रश्न के उत्तर नहीं मिल जाते – MozenRath

7

यह भी है कि तालिका के अंदर किसी भी डेटा निकालने के बिना एक मेज से मेज स्कीमा निकालने के लिए किया जा सकता है। जैसा कि एंड्रिया कोलोनी ने कहा कि इसका उपयोग करने के अन्य लाभ होंगे।

1

कुछ सिस्टम स्क्रिप्ट का उपयोग करते हैं और गतिशील रूप से चयनित सूची को पूर्ण सूची से छिपाने के लिए सेट कर सकते हैं; इसलिए SQL पर एक झूठी स्थिति को पारित करने की आवश्यकता है। उदाहरण के लिए, 500 में से तीन रिकॉर्ड चिकित्सा कारणों से गोपनीयता के रूप में चिह्नित किए जा सकते हैं और हर किसी के लिए दृश्यमान नहीं होना चाहिए। एक गतिशील क्वेरी एचआर में 500 रिकॉर्ड दिखाई देगी, जबकि 497 प्रबंधकों के लिए दृश्यमान हैं। एसक्यूएल क्लॉज को एक मान पारित किया जाएगा जो सशर्त रूप से सेट किया गया है, यानी 'जहां 1 = 1' या 'WHERE 1 = 0', सिस्टम में लॉग इन करने के आधार पर।

1

यदि उपयोगकर्ता केवल रिकॉर्ड जोड़ने का इरादा रखता है, तो सबसे तेज़ तरीका किसी भी मौजूदा रिकॉर्ड को वापस किए बिना रिकॉर्डसेट खोलता है।

संबंधित मुद्दे