Los marcadores de posición no se pueden citar. Tan simple como eso:
SELECT ... WHERE foo = ?
SELECT ... WHERE foo = '?'
El primero es un marcador de posición y funciona como se esperaba. El otro está probando la igualdad contra el carácter "signo de interrogación". Ya no es un marcador de posición.
Y luego está el problema de ?
ser un metacarácter regex también. Si los marcadores de posición PODRÍAN ser citados, entonces dale
SELECT ... WHERE foo REGEXP '^.?'
¿Sería eso ?
ser un marcador de posición de consulta, o es el operador de rango de expresiones regulares "cero-o-uno"?
Si desea utilizar marcadores de posición en expresiones regulares, debe "construir" el patrón de expresión regular
SELECT ... WHERE foo REGEXP concat('^.', ?)
Exactamente de la misma manera que tendría que construir un LIKE
patrón:
SELECT ... WHERE foo LIKE '%?%' // wrong
SELECT ... WHERE foo LIKE concat('%', ?, '%') // right