I segnaposto non possono essere citati. Semplice come quello:
SELECT ... WHERE foo = ?
SELECT ... WHERE foo = '?'
Il primo è un segnaposto e funziona come previsto. L'altro sta verificando l'uguaglianza rispetto al carattere "punto interrogativo". Non è più un segnaposto.
E poi c'è il problema di ?
essendo anche un metacarattere regex. Se i segnaposto POTREBBERO essere citati, allora dati
SELECT ... WHERE foo REGEXP '^.?'
sarebbe ?
essere un segnaposto di query o è l'operatore di intervallo "zero-o-uno" della regex?
Se vuoi usare i segnaposto nelle espressioni regolari, devi "costruire" il pattern delle espressioni regolari
SELECT ... WHERE foo REGEXP concat('^.', ?)
Esattamente nello stesso modo in cui dovresti creare un LIKE
modello:
SELECT ... WHERE foo LIKE '%?%' // wrong
SELECT ... WHERE foo LIKE concat('%', ?, '%') // right