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

क्वेरी में REGEX के साथ तैयार SQL कथन के लिए सुरक्षा

प्लेसहोल्डर्स को उद्धृत नहीं किया जा सकता है। इतना आसान:

SELECT ... WHERE foo = ?
SELECT ... WHERE foo = '?'

पहला प्लेसहोल्डर है, और अपेक्षा के अनुरूप काम करता है। दूसरा चरित्र "प्रश्न चिह्न" के खिलाफ समानता के लिए परीक्षण कर रहा है। यह अब प्लेसहोल्डर नहीं है।

और फिर ? . की समस्या है एक रेगेक्स मेटाएक्टेक्टर भी है। यदि प्लेसहोल्डर्स को उद्धृत किया जा सकता है, तो दिया गया

SELECT ... WHERE foo REGEXP '^.?' 

क्या वह ? . होगा एक क्वेरी प्लेसहोल्डर बनें, या यह रेगेक्स "ज़ीरो-ऑर-वन" रेंज ऑपरेटर है?

यदि आप रेगेक्स में प्लेसहोल्डर्स का उपयोग करना चाहते हैं, तो आपको रेगेक्स पैटर्न को "बिल्ड" करना होगा

SELECT ... WHERE foo REGEXP concat('^.', ?)

ठीक उसी तरह जैसे आपको एक LIKE बनाना होगा पैटर्न:

SELECT ... WHERE foo LIKE '%?%' // wrong
SELECT ... WHERE foo LIKE concat('%', ?, '%') // right



  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. डोमेन स्वामित्व कैसे सत्यापित करें

  3. mysql वापसी तालिका का नाम

  4. EntityFramework में डायनामिक कॉलम नाम से ऑर्डर कैसे करें?

  5. गतिरोध के बाद MySQL में लेनदेन को फिर से शुरू करना