मैं निम्नलिखित क्वेरी को तैयार कथन के रूप में निष्पादित करने का प्रयास करता हूं:

self.cursor.execute("select distinct ? from isap.tn_documentation where ? = '?' and  ? <> ''", attribute2, attribute1, i.text(0), attribute2)

निष्पादन के बाद मुझे निम्न त्रुटि मिलती है:

SQL में 3 पैरामीटर मार्कर हैं, लेकिन 4 पैरामीटर दिए गए थे', 'HY000

0
Mow 21 जिंदा 2020, 01:02

1 उत्तर

सबसे बढ़िया उत्तर

आप कॉलम नामों को क्वेरी पैरामीटर के रूप में पास नहीं कर सकते। आपको क्वेरी स्ट्रिंग में कॉलम नामों को जोड़ना होगा (कॉलम मानों को पैरामीटर के रूप में रखते हुए)।

यह दिखना चाहिए:

self.cursor.execute(
    "select distinct " 
        + attribute2 
        + " from isap.tn_documentation where " 
        + attribute1 + " = ? and " + attribute2 + " <> ''", 
    i.text(0)
)

कृपया ध्यान दें कि ऐसा करने से आपका कोड SQL इंजेक्शन के सामने आ जाता है: यदि आपके गुण इनपुट आपके कोड के बाहर से आ रहे हैं, तो यह एक गंभीर सुरक्षा उल्लंघन है। आपको यह सुनिश्चित करने की आवश्यकता होगी कि उनमें दुर्भावनापूर्ण डेटा नहीं है (उदाहरण के लिए अनुमत मानों की एक निश्चित सूची के विरुद्ध प्रत्येक विशेषता के मूल्य की जांच करके: यह काफी आसान होना चाहिए क्योंकि हम कॉलम नामों से निपट रहे हैं)।

2
GMB 20 जिंदा 2020, 22:16