Se você está tentando fazer o que parece estar tentando fazer... não tente fazer isso.
Não é isso que uma declaração preparada é (ou pelo menos não é o que deveria ser).
Seu código de cliente não deve estar tentando interpolar valores na string de consulta para gerar uma consulta "concluída" para enviar ao servidor para execução. Essa é uma receita para o desastre, para não mencionar uma falsa sensação de segurança.
As declarações preparadas entregam a declaração com
?
placeholders para o servidor como está, onde o servidor "prepara" a instrução para execução... e então o cliente envia os parâmetros para o servidor ("vinculando" os parâmetros) para execução. Fazendo isso, o servidor nunca ficará confuso quanto a "qual parte é o SQL" e "qual parte são os dados", impossibilitando a injeção de sql e tornando desnecessário o escape e a higienização dos dados. Se você não estiver se comunicando diretamente com a C-API, deverá chamar os métodos em sua biblioteca que expõem essas mesmas funções para você.