Os espaços reservados não podem ser citados. Simples assim:
SELECT ... WHERE foo = ?
SELECT ... WHERE foo = '?'
O primeiro é um espaço reservado e funciona conforme o esperado. O outro está testando a igualdade contra o caractere "ponto de interrogação". Não é mais um marcador de posição.
E depois há o problema de
?
sendo um metacaractere regex também. Se os espaços reservados PUDEREM ser citados, então dado SELECT ... WHERE foo REGEXP '^.?'
isso
?
ser um marcador de posição de consulta ou é o operador de intervalo "zero-ou-um" regex? Se você quiser usar espaços reservados em regexes, precisará "construir" o padrão regex
SELECT ... WHERE foo REGEXP concat('^.', ?)
Exatamente da mesma forma que você teria que construir um
LIKE
padronizar:SELECT ... WHERE foo LIKE '%?%' // wrong
SELECT ... WHERE foo LIKE concat('%', ?, '%') // right