Si estás tratando de hacer lo que parece que estás tratando de hacer... no intentes hacer eso.
Eso no es lo que es una declaración preparada (o al menos eso no es lo que debería ser).
Su código de cliente no debería intentar interpolar valores en la cadena de consulta para generar una consulta "terminada" para enviar al servidor para su ejecución. Esa es una receta para el desastre, sin mencionar una falsa sensación de seguridad.
Las declaraciones preparadas entregan la declaración con ?
marcadores de posición al servidor tal cual, donde el servidor "prepara" la instrucción para su ejecución... y luego el cliente envía los parámetros al servidor ("vinculando" los parámetros) para su ejecución. Al hacer esto, el servidor nunca se confundirá en cuanto a "qué parte es el SQL" y "qué parte son los datos", haciendo imposible la inyección de sql y haciendo innecesario el escape y la desinfección de los datos.
Si no se está comunicando directamente con la C-API, entonces debería llamar a los métodos en su biblioteca que exponen esas mismas funciones para usted.