Заместителите не могат да се цитират. Лесно като това:
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