Ако се опитвате да направите това, което изглежда, че се опитвате... не се опитвайте да правите това.
Подготвеното изявление не е това (или поне не е това, което трябва да бъде).
Вашият клиентски код не трябва да се опитва да интерполира стойности в низа на заявката, за да генерира "завършена" заявка, която да изпрати на сървъра за изпълнение. Това е рецепта за бедствие, да не говорим за фалшиво чувство за сигурност.
Подготвените оператори доставят изявлението с ?
заместители към сървъра такъв, какъвто е, където сървърът "подготвя" оператора за изпълнение... и след това клиентът изпраща параметрите на сървъра ("свързване" на параметрите) за изпълнение. Правейки това, сървърът никога няма да бъде объркан относно „коя част е SQL“ и „коя част са данните“, което прави инжектирането на sql невъзможно и прави избягването и дезинфекцията на данните ненужни.
Ако не общувате директно с C-API, тогава трябва да извикате методите във вашата библиотека, които ви предоставят същите функции.