Si vous essayez de faire ce que vous semblez essayer de faire... n'essayez pas de le faire.
Ce n'est pas ce qu'est une déclaration préparée (ou du moins ce n'est pas ce qu'elle devrait être).
Votre code client ne doit pas essayer d'interpoler des valeurs dans la chaîne de requête afin de générer une requête "terminée" à envoyer au serveur pour exécution. C'est la recette du désastre, sans parler d'un faux sentiment de sécurité.
Les instructions préparées délivrent l'instruction avec ?
espaces réservés au serveur tel quel, où le serveur "prépare" l'instruction pour l'exécution... puis le client envoie les paramètres au serveur ("liant" les paramètres) pour exécution. Ce faisant, le serveur ne sera jamais confus quant à "quelle partie est le SQL" et "quelle partie est les données", rendant l'injection sql impossible et rendant inutile l'échappement et la désinfection des données.
Si vous ne communiquez pas directement avec l'API C, vous devez appeler les méthodes de votre bibliothèque qui vous exposent ces mêmes fonctions.