如何为 SQL 查询准备C++字符串

How to prepare a C++ string for sql query

本文关键字:C++ 字符串 查询 SQL      更新时间:2023-10-16

>我必须准备适合查询的字符串,因为这些字符串将在查询中用作字段值。 如果它们包含 ' 等,则 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 命令。