我有一个字符串:
string query;
query = "insert or replace into TABLEA (a,b,c) values (@a,\"@b\",\"@c\");";
这样我只需简单的替换就可以将字符串插入到B和C中:
string instring("I have a 3\" gauge");
string instring2("I am looking for 1/8\" thickness");
Replace(&query, "@a", to_string(1));
Replace(&query, "@b", instring);
Replace(&query, "@c", instring2);
所以现在我的查询字符串是:
"insert or replace into TABLEA (a,b,c) values (1,\"I have a 3\" gauge\",\"I am looking for 1/8\" thickness\");";
SQLITE3得到它,它看起来像:
insert or replace into TABLEA (a,b,c) values (1,"I have a 3" gauge","I am looking for 1/8" thickness");
问题是字符串过早结束 . 我试图添加额外的转义字符,但这似乎也不起作用 .
现在我正在使用sqlite3_exec()来执行所有操作 . 还有别的我应该做的吗?准备好的声明是否处理我想要做的事情?
我应该尝试使用prepared_v2,这可能会解决问题吗?
我该怎么接近这个?
2 回答
在SQL中,字符串使用单引号,并使用两个单引号进行转义 . (可以接受双引号以与MySQL兼容,但不应使用 . )
您的查询应如下所示:
或者像这样:
但是,为避免字符串格式化问题,建议使用参数 . 这是它如何与直接SQLite函数调用一起工作(包装器可能以不同的方式工作):
每个内部字符串周围都需要单引号: