यदि मेरे पास SELECT * from authors where name = @name_param
जैसी कोई क्वेरी है, तो क्या पैरामीटर नामों (विशेष रूप से "name_param") को पार्स करने के लिए कोई रेगेक्स है?SQL पैरामीटर को पार्स करने के लिए Regex
धन्यवाद
यदि मेरे पास SELECT * from authors where name = @name_param
जैसी कोई क्वेरी है, तो क्या पैरामीटर नामों (विशेष रूप से "name_param") को पार्स करने के लिए कोई रेगेक्स है?SQL पैरामीटर को पार्स करने के लिए Regex
धन्यवाद
यह मुश्किल है, क्योंकि पैरामीटर भी उद्धृत तार के अंदर हो सकता है।
SELECT * FROM authors WHERE name = @name_param
AND string = 'don\'t use @name_param';
कैसे नियमित अभिव्यक्ति पहले @name_param
, लेकिन दूसरी को उपयोग करने के लिए पता होगा?
यह एक समस्या है जिसे हल किया जा सकता है, लेकिन यह एक नियमित अभिव्यक्ति में ऐसा करने के लिए व्यावहारिक नहीं है। मुझे इसे Zend_Db में संभालना था, और मैंने जो किया वह पहले सभी उद्धृत तारों और सीमित पहचानकर्ताओं को बाहर कर दिया गया था, और फिर आप शेष पर नियमित अभिव्यक्तियों का उपयोग कर सकते हैं।
आप यहाँ कोड देख सकते हैं: http://framework.zend.com/code/browse/~raw,r=8064/Zend_Framework/trunk/library/Zend/Db/Statement.php
कार्यों _stripQuoted()
और _parseParameters()
देखें।
SQL टिप्पणियों में दिखाई देने वाले पैरामीटर नामों का उल्लेख नहीं करना है। Regexes महान हैं, लेकिन नौकरियों को पार्स करने के लिए जरूरी नहीं है। –
हां, एसक्यूएल टिप्पणियों के बारे में अच्छा बिंदु। –
को देखते हुए आप कोई उद्धृत स्ट्रिंग या उन में मानकों के साथ टिप्पणी है, आवश्यक regex काफी तुच्छ होगा:
@([_a-zA-Z]+) /* match group 1 contains the name only */
मैं Bill Karwin's recommendation के साथ जाने सतर्क रहना होगा, जानते हुए भी कि भोली दृष्टिकोण अपने नुकसान है। लेकिन यदि आप जिस डेटा से निपटते हैं, उस परवाह करें, तो यह रेगेक्स आपको चाहिए।
बिल्कुल सुनिश्चित नहीं है कि आप क्या पूछ रहे हैं। क्या आप स्पष्टीकरण दे सकते हैं, या उदाहरण दे सकते हैं? क्या आप नामों की एक सूची में पास करना चाहते हैं और इसे WHERE में नाम (name_a, name_b, ...) में परिवर्तित करना चाहते हैं? और आपको आरडीबीएमएस निर्दिष्ट करने की आवश्यकता है, रेगेक्स समर्थन उनके बीच अलग है। –