【发布时间】:2019-10-21 13:19:48
【问题描述】:
我要向表中插入数据,数据是C变量。
这是我当前的代码:
const char* sqlUpdateTable = "INSERT INTO MyTable
VALUES(25, 'String1', 'String2')
ON CONFLICT (id)
DO
UPDATE SET name = 'New String';";
其实不仅'String1'、'String2'和'New String'需要是变量,id也是C/C++变量。
id 很长。
String1 是双精度的。
String2 是整数。
谢谢。
【问题讨论】:
-
按照您的要求手动格式化 SQL 查询是危险的。您真的应该使用专用的 SQL 库来为您处理转义。
-
如果我记得 another recent question of yours,你正在使用 sqlite。您应该使用prepared statements 的接口来实现这一点,以及正确(安全!!)绑定数据。
-
格式化 SQL 查询 -> 我不明白,你的意思是使用 const char* 作为字符串来调用 sqlite3_exec()?我从谷歌看到这个,还有其他更好的方法吗?
-
有时转义会随着时间而改变(以正确转义新序列),因此使用转义例程比尝试自己模仿转义例程要好得多。使用(无论哪个)提供的 SQL 转义例程会更好。
-
为什么您不想使用 odbc 驱动程序,您将获得 BIND 参数函数,使用这些函数您可以使用这些参数执行查询。参数可以是字符串、整数等。