如何为 SQL 查询准备C++字符串
How to prepare a C++ string for sql query
>我必须准备适合查询的字符串,因为这些字符串将在查询中用作字段值。 如果它们包含 ' 等,则 SQL 查询无法执行。
因此,我想用"替换" 我已经看到了查找子字符串并将其替换为子字符串的代码。 但我想这个问题有点棘手,因为替换字符串还包含两个单引号 '' 替换一个引号 ' 所以当我必须找到下一个出现时,它会遇到一个故意替换的 '。
我正在使用 Sql lite C api,示例查询可能如下所示
select * from persons where name = 'John' D'oe'
由于John Doe包含'查询将失败,所以我希望名称中出现的所有'都替换为''
你们如何在查询中准备要在 sql 中使用的字段值的任何想法???可能是一件基本的事情,但我在 C/C++ 中不太聪明。
您的帮助将非常有帮助
使用带有参数的查询而不是替换内容,这可能会导致几个问题(如SQL注入漏洞)。
MySQL 示例:
sql::Connection *con = ...;
string query = "SELECT * FROM TABLE WHERE ID = ?";
sql::PreparedStatement *prep_stmt = con->prepareStatement(query);
prep_stmt->setInt(1, 1); // Replace first argument with 1
prep_stmt->execute();
这将执行SELECT * FROM TABLE WHERE ID = 1
。
编辑:有关SQLite准备语句的更多信息,请点击此处和此处。
这取决于您使用的 SQL 库。 其中一些将具有 PreparedStatement 的概念,您将使用问号代替变量,然后当您在语句上设置这些变量时,它将在内部确保您无法注入 sql 命令。