SQLite chaîne d'échappement c++
Considérons le code suivant
char bar[] = "hello world \"One\", two, 'three'";
char *zSQL = sqlite3_mprintf("INSERT INTO stuff (`foo`) VALUES ('%q');", bar ) ;
sqlite3_exec(db, zSQL, 0, 0, 0);
sqlite3_free(zSQL);
/* Produces a exception error */
Le problème est que les guillemets ne sont pas arriver a échappé dans l'instruction SQL. Si j'étais à la programmation en PHP, je voudrais utiliser une fonction comme fonction sqlite_escape_string pour échapper à la les chaînes avant de les insérer dans la requête SQL mais je n'arrive pas à trouver l'équivalent de la fonction en C++. J'ai pu construire mon propre fonction sqlite_escape_string comme une fonction, mais je suis sûr qu'il y a déjà écrite/épreuve...
Est-il une fonction sqlite_escape_string() fonction équivalente pour le c++?
- Selon la documentation, la
%q
chaîne de format est censé échapper les guillemets. Donc la bonne question à se poser est, pourquoi n'est-il pas de travail? Pouvez-vous poster le résultat de lasqlite3_mprintf
appel? - vous avez raison, il y avait une erreur de syntaxe.
- Pourquoi ne pas utiliser std::string bla(szYourstring); bla = bla.remplacer("'", """); char* szCharPointer = bla.c_str();
- Il y a peut être d'autres caractères que je ne sais pas de qui pourraient causer des problèmes à l'avenir. par exemple échappé caractères, les caractères non imprimables, ect..
Vous devez vous connecter pour publier un commentaire.
Pas. Utiliser les paramètres liés.
Voir:
http://www.sqlite.org/c3ref/prepare.html
http://www.sqlite.org/c3ref/bind_blob.html
Vous avez la même question que beaucoup se posent. Il n'y a pas quelque chose de construit en.
La meilleure solution pour la concaténation de chaîne serait de lier des paramètres, qui élude la trajectoire de la question.