क्या रेल विधि find_by_sql
में एसक्यूएल को स्वच्छ करने का कोई तरीका है?रेल, find_by_sql में SQL को sanitize कैसे करें
मैं इस समाधान की कोशिश की है: Ruby on Rails: How to sanitize a string for SQL when not using find?
लेकिन यह
Model.execute_sql("Update users set active = 0 where id = 2")
यह एक त्रुटि फेंकता में विफल रहता है, लेकिन एसक्यूएल कोड के निष्पादित होने और आईडी 2 के साथ उपयोगकर्ता अब एक विकलांग खाता है।
सरल find_by_sql
भी काम नहीं करता:
Model.find_by_sql("UPDATE user set active = 0 where id = 1")
# => code executed, user with id 1 have now ban
संपादित करें:
खैर मेरे मुवक्किल (एसक्यूएल द्वारा चुनें) कुछ जटिल क्वेरी बनाने के लिए है कि समारोह बनाने के लिए व्यवस्थापक पैनल में अनुरोध (मिलती है, विशेष परिस्थितियों आदि)। तो मैं वास्तव में find_by_sql खोजना चाहता हूँ।
दूसरा संपादित करें:
मैं प्राप्त करने के लिए कि 'बुराई' SQL कोड निष्पादित नहीं किया जाएगा चाहते हैं।
व्यवस्थापक पैनल में आप क्वेरी टाइप कर सकते हैं ->Update users set admin = true where id = 232
और मैं किसी भी अद्यतन/DROP/ALTER SQL कमांड को अवरुद्ध करना चाहता हूं। बस जानना चाहते हैं, कि यहां आप केवल चयन निष्पादित कर सकते हैं।
कुछ प्रयासों के बाद मैंने निष्कर्ष निकाला कि sanitize_sql_array
दुर्भाग्य से ऐसा नहीं करता है।
क्या रेल में ऐसा करने का कोई तरीका है ??
भ्रम के लिए खेद है ..
परिणाम मिला: 'संरक्षित विधि 'sanitize_sql_array' ActiveRecord :: बेस के लिए कहा जाता है: Class' –
मैंने अपनी पोस्ट अपडेट की है। मुझे उम्मीद है कि यह आपको – bor1s
में मदद करेगा .. या आप इसका उपयोग कर सकते हैं: 'ActiveRecord :: Base.send (: sanitize_sql_array, "आपकी स्ट्रिंग") ' – bor1s