2010-11-20 15 views
6

Considere una cadena con un apóstrofo que debe insertarse en una tabla SQLite.insertar valor de cadena con un apóstrofo

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

Cómo se puede escapar margen de beneficio o el apóstrofe en el valor de la cuenta de INSERT?

Respuesta

16

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

Usted no debe estar pasando de entrada directamente en una consulta como una cadena como esta. No solo es una molestia, sino que también es vulnerable a los ataques de inyección SQL, que pueden no ser un gran problema para una aplicación Mac, pero es una mala idea cuando tienes Declaraciones preparadas a tu disposición. Las Declaraciones preparadas garantizan que la base de datos subyacente lea los valores de entrada reales, sin modificar de forma segura.

Para su ejemplo específico (comprobación de errores removido por razones de brevedad/claridad):

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); 

(no probado, pero se entiende la idea).

Cuestiones relacionadas