Placeholder tidak dapat dikutip. Sesederhana itu:
SELECT ... WHERE foo = ?
SELECT ... WHERE foo = '?'
Yang pertama adalah placeholder, dan berfungsi seperti yang diharapkan. Yang lainnya adalah menguji kesetaraan terhadap karakter "tanda tanya". Ini bukan tempat penampung lagi.
Lalu ada masalah ?
menjadi metakarakter regex juga. Jika placeholder BISA dikutip, maka diberikan
SELECT ... WHERE foo REGEXP '^.?'
apakah itu ?
menjadi placeholder kueri, atau apakah itu operator rentang "nol-atau-satu" regex?
Jika Anda ingin menggunakan placeholder di regex, Anda harus "membangun" pola regex
SELECT ... WHERE foo REGEXP concat('^.', ?)
Persis dengan cara yang sama seperti Anda harus membuat LIKE
pola:
SELECT ... WHERE foo LIKE '%?%' // wrong
SELECT ... WHERE foo LIKE concat('%', ?, '%') // right