PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

जावास्क्रिप्ट (पोस्टग्रेज डीबी) - WHERE IN ( ) क्लॉज में पैरामीटर के रूप में एक सरणी के साथ तैयार स्टेटमेंट का उपयोग कैसे करें

यह नोड-पोस्टग्रेज के अक्सर पूछे जाने वाले प्रश्नों में वर्णित है https://github.com/brianc/node-postgres/wiki/FAQ#11-how- do-i-build-a-where-foo-in--query-to-find-rows-matching-an-array-of-values

मैं मानों की एक सरणी से मेल खाने वाली पंक्तियों को खोजने के लिए WHERE foo IN (...) क्वेरी कैसे बनाऊं? node-postgres PostgreSQL सरणियों के लिए सरल जावास्क्रिप्ट सरणियों को मैप करने का समर्थन करता है, इसलिए ज्यादातर मामलों में आप इसे किसी अन्य की तरह ही पास कर सकते हैं पैरामीटर।

client.query("SELECT * FROM stooges WHERE name = ANY ($1)", [ ['larry', 'curly', 'moe'] ], ...);

ध्यान दें कि =कोई भी IN (...) लिखने का एक और तरीका है, लेकिन IN (...) के विपरीत यह काम करेगा कि जब आप किसी सरणी को क्वेरी पैरामीटर के रूप में पास करते हैं तो आप कैसे अपेक्षा करते हैं।

यदि आप पहले से सरणी की लंबाई जानते हैं तो आप इसे एक IN सूची में समतल कर सकते हैं:

// passing a flat array of values will work:
client.query("SELECT * FROM stooges WHERE name IN ($1, $2, $3)", ['larry', 'curly', 'moe'], ...);

... लेकिन बहुत कम लाभ होता है जब =कोई जावास्क्रिप्ट सरणी के साथ काम करता है।

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

var stooge_names = ['larry', 'curly', 'moe'];
var offset = 1;
var placeholders = stooge_names.map(function(name,i) { 
    return '$'+(i+offset); 
}).join(',');
client.query("SELECT * FROM stooges WHERE name IN ("+placeholders+")", stooge_names, ...);

आशा है कि यह मदद करता है क्योंकि Google इसे खोजने में विफल रहता है




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लगातार दिनों की 'लकीर' में पंक्तियों में चल रही गिनती कैसे जोड़ें

  2. Postgresql Windows, क्या कोई डिफ़ॉल्ट पासवर्ड है?

  3. PostgreSQL में कैसे रैंडम () काम करता है

  4. थोक में उपनाम बनाएं?

  5. त्रुटि:XX.csv फ़ाइल को स्टेट नहीं कर सका:अज्ञात त्रुटि