什么是 C++ 中的“查询参数”?

Posted

技术标签:

【中文标题】什么是 C++ 中的“查询参数”?【英文标题】:What is a "query parameter" in C++? 【发布时间】:2008-11-19 04:41:12 【问题描述】:

我们使用 stringstream 在 C++ 中准备选择查询。但我们强烈建议使用 QUERY PARAMETERS 提交 db2 sql 查询,以避免使用 stringstream。任何人都可以分享 C++ 中查询参数的确切含义吗?另外,分享一些实用的示例代码sn-ps。

提前感谢帮助。

编辑:它是 stringstream 而不是 strstream。

谢谢, 马修·李菊

【问题讨论】:

这个问题与 SQL 有关,而不是 C++;但我不是 SQL 专家,所以我会让其他人真正回答这个问题。 :-) 【参考方案1】:

我怀疑这通常指的是参数化查询,而不是在字符串中构造查询,它们提供 sql 变量(或参数),然后分别传递这些变量。这些对于处理 SQL 注入攻击要好得多。举例说明:

"SELECT * FROM Customers WHERE CustomerId = " + _customerId; 

很糟糕,而这个:

"SELECT * FROM Customers where CustomerId = @CustomerId" 

很好。问题是您必须将参数添加到查询对象(我不知道这是如何在 C++ 中完成的。

其他问题的参考:

https://***.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks Stored Procedures vs Parameterized Queries

狂野的网络:

http://www.justsoftwaresolutions.co.uk/database/database-tip-use-parameterized-queries.html

【讨论】:

【参考方案2】:

参数化查询形式的sql查询比字符串形式的查询安全,避免sql注入攻击。 参数化查询示例

StringBuilder sqlstr = new StringBuilder();  
cmd.Parameters.AddWithValue("@companyid", CompanyID);  
sqlstr.Append("SELECT evtconfigurationId, companyid, 
  configname, configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid=@companyid ");

查询字符串格式示例

StringBuilder sqlstr = new StringBuilder();   
sqlstr.Append("SELECT evtconfigurationId, companyid, configname, 
   configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid" +  CompanyID);

【讨论】:

以上是关于什么是 C++ 中的“查询参数”?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL JSON 查询:参数 1 中的 JSON 文本无效

如何从 Angular 2 中的 url 获取查询参数?

为啥命名查询?

参数化查询如何帮助防止 SQL 注入?

参数化查询如何帮助防止 SQL 注入?

将对象转换为 url 查询参数