【问题标题】:SQLite escape string c++SQLite 转义字符串 C++
【发布时间】:2011-06-16 18:18:35
【问题描述】:

考虑下面的代码

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 */

问题在于 SQL 语句中的引号没有被转义。如果我在 PHP 中编程,我会使用像 sqlite_escape_string 这样的函数来转义字符串,然后再将它们插入 SQL 查询,但我似乎无法在 C++ 中找到等效的函数。我可以构建我自己的类似 sqlite_escape_string 的函数,但我确信必须有一个已经编写/测试过的函数......

c++ 是否有 sqlite_escape_string() 等效函数?

【问题讨论】:

  • 根据文档,%q 格式字符串应该转义引号。所以要问的正确问题是,为什么它不起作用?可以发布sqlite3_mprintf 调用的结果吗?
  • @tim,你是对的,存在语法错误。
  • 为什么不使用 std::string bla(szYourstring); bla = bla.replace("'", "''"); char* szCharPointer = bla.c_str();
  • @Quandary 可能还有其他我不知道的字符可能会在将来引起问题。例如转义字符、不可打印字符等。

标签: c++ sql sqlite escaping


【解决方案1】:

您有许多人提出的相同问题。没有内置任何东西。

字符串连接的更好解决方案是bind parameters,它回避了转义问题。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 好吧,这并不总是有效的。例如,创建视图时不能绑定参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2012-01-31
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多