我必须准备适合查询的字符串,因为这些字符串将在查询中用作字段值。如果它们包含'etc,则sql查询无法执行。
因此我想替换'with''我已经看到了用子串查找和替换子串的代码。但我想问题有点棘手,因为替换字符串也包含两个单引号''替换一个引号'所以当我必须找到下一个出现时它会遇到'故意被替换。
我正在使用Sql lite C api,示例查询可能看起来像这样
select * from persons where name = 'John' D'oe'
由于John Doe包含'查询将失败,所以我希望名称中的所有出现'都替换为''
你们如何在查询中准备你的字段值以便在sql中使用的任何想法?可能这是一个基本的东西,但我不太聪明的C / C ++。
你的帮助会非常有帮助
答案 0 :(得分:4)
使用带参数的查询而不是替换东西,这可能会导致一些问题(如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
。
答案 1 :(得分:1)
这取决于您使用的SQL库。其中一些将具有PreparedStatement的概念,您将使用问号代替变量,然后当您在语句上设置这些变量时,它将在内部确保您不能注入sql命令。