Comment préparer une chaîne C ++ pour une requête SQL

Je dois préparer des chaînes pour qu’elles conviennent aux requêtes, car elles seront utilisées dans les requêtes en tant que valeurs de champ. Si elles contiennent un “etc”, la requête SQL échoue.

Je souhaite donc remplacer “avec”. J’ai vu le code pour rechercher et remplacer une sous-chaîne par une sous-chaîne. mais je suppose que le problème est un peu délicat, car le remplacement de chaîne contient également deux guillemets simples, ” remplacer un devis ”. Ainsi, lorsque je dois trouver l’occurrence suivante, il rencontre un ‘qui a été intentionnellement remplacé.

J’utilise Sql Lite C api et l’exemple de requête pourrait ressembler à ceci

select * from persons where name = 'John' D'oe' 

Puisque John Doe contient un ‘la requête va échouer, je veux donc que toutes les occurrences de’ dans le nom soient remplacées par ”

Toutes les idées comment vous les gars prépare vos valeurs de champ dans la requête pour être utilisé dans SQL ??? c’est peut-être une chose élémentaire, mais je ne suis pas trop intelligent en C / C ++.

votre aide serait très utile

Utilisez des requêtes avec des arguments au lieu de remplacer des éléments, ce qui pourrait entraîner plusieurs problèmes (comme des vulnérabilités d’injection SQL).

Exemple MySQL:

 sql::Connection *con = ...; ssortingng query = "SELECT * FROM TABLE WHERE ID = ?"; sql::PreparedStatement *prep_stmt = con->prepareStatement(query); prep_stmt->setInt(1, 1); // Replace first argument with 1 prep_stmt->execute(); 

Ceci exécutera SELECT * FROM TABLE WHERE ID = 1 .

EDIT : plus d’infos pour les instructions préparées SQLite ici et ici .

Cela dépend de la bibliothèque SQL que vous utilisez. Certains d’entre eux auront le concept PreparedStatement, dans lequel vous utiliserez des points d’interrogation à la place des variables. Lorsque vous définissez ces variables dans l’instruction, cela garantit en interne que vous ne pouvez pas injecter de commandes SQL.