2010-11-20 7 views
6

Considérons une chaîne avec une apostrophe qui doit être insérée dans une table SQLite.insertion d'une valeur de chaîne avec apostrophe

INSERT INTO myTable (table_Title TEXT) VALUES ('world's') 

Comment pouvez-vous le balisage ou échapper à l'apostrophe de la valeur dans la déclaration INSERT?

Répondre

16

http://www.sqlite.org/c3ref/bind_blob.html

Vous ne devriez pas être entrée de passage directement dans une requête comme une chaîne comme celui-ci. Non seulement c'est une nuisance, mais il est également vulnérable aux attaques par injection SQL, ce qui n'est pas un gros problème pour une application Mac, mais c'est toujours une mauvaise idée lorsque vous avez des instructions préparées à votre disposition. Les instructions préparées garantissent que la base de données sous-jacente lit les valeurs d'entrée réelles, non modifiées, en toute sécurité.

Pour votre exemple spécifique (vérification d'erreurs supprimé par souci de concision/clarté):

sqlite3 *db; 
sqlite3_open("test.db", &db); 

// Create a prepared statement 
sqlite3_stmt *stmt; 
const char *sql = "INSERT INTO myTable (table_Title TEXT) VALUES (?)"; 
sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); 

// Bind the parameter (safely) 
sqlite3_bind_text(stmt, 1, "world's", -1, NULL); 

// Execute the prepared statement 
sqlite3_step(stmt); 

(non testé, mais vous voyez l'idée).

Questions connexes