将变量传递给SQL

时间:2012-03-22 08:46:11

标签: c++

我有一个IP地址变量。它在Access 2010数据库中保存为文本。我试图用ipSrc运行此查询,查询始终失败。我的猜测是它将ipSrc视为ipSrc而不是实际的IP地址。我尝试使用'ipSrc'并且只是简单的ipSrc,并且两次重新启动都失败了。还试过“”ipSrc“”,也失败了。这没能。 '&安培; ipSrc'。这是声明。

SQLCHAR* query = (SQLCHAR*)"SELECT tblIP.[IPAddress], tblIP.[IPType], tblIP.[IPStatus], tblIP.[IPMax] FROM tblIP WHERE tblIP.[IPAddress]= ipSrc AND tblIP.[IPType]=3 AND tblIP.[IPStatus]=1 AND tblIP.[IPMax]=0;"; 

这是ipSrc的定义。

translate_ip(ip_header->source_ip, ipSrc);

使用printf打印出来作为实际的IP地址。

printf("\n   Source      IP: %s", ipSrc);

1 个答案:

答案 0 :(得分:4)

代码无法从你所拥有的内容中知道ipSrc应该被特别对待,它只是按原样传递它。

您可以尝试将查询字符串动态地构造为C ++字符串,然后使用它来填充查询。类似的东西:

std::string strqry =
      "SELECT  tblIP.[IPAddress], "
    + "        tblIP.[IPType], "
    + "        tblIP.[IPStatus], "
    + "        tblIP.[IPMax] "
    + "FROM    tblIP "
    + "WHERE   tblIP.[IPAddress] = '" + ipSrc + "' "
    + "AND     tblIP.[IPType] = 3 "
    + "AND     tblIP.[IPStatus] = 1 "
    + "AND     tblIP.[IPMax] = 0"
    + ";"; 

SQLCHAR *query = (SQLCHAR *)(strqry.c_str());

// Now use query

确保您可以控制ipSrc值。否则,您将受到SQL注入攻击(在这种情况下,您将需要使用准备/参数化语句)。