प्लेसहोल्डर्स को उद्धृत नहीं किया जा सकता है। इतना आसान:
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