如何在c ++中传递查询中的变量

时间:2014-02-05 05:32:42

标签: c++ mysql++

#include <iostream>
#include <string>
#include </usr/local/include/mysql++/mysql++.h>
#include "/usr/local/include/mysql++/cmdline.h"
#include </usr/include/mysql/mysql_version.h>
int main(){
  int zipcode=2105;
  ostringstream strzip;
  strzip << zipcode;
  string strzipcode = strzip.str();

  mysqlpp::Query query = conn1.query("SELECT * FROM `table` WHERE FIND_IN_SET( 'strzipcode', `TableZipcodes`");
  if (mysqlpp::StoreQueryResult res1 =query.store())
  {
    cout << "We have:" << endl;
    for (size_t i= 0; i < res1.num_rows();i++)
    {
      cout<< '\t' <<res1[i][0]<<endl;
    }
  }
  else
  {
    cerr << "Failed to get item list: " << query.error() << endl;
    return 1;
  }

  return 0;
}

当我运行此代码时,它给我语法错误,我在查询中传递变量strzipcode。如何在这里传递变量。请帮忙

1 个答案:

答案 0 :(得分:1)

您看到的根问题是查询字符串

"SELECT * FROM `table` WHERE FIND_IN_SET( 'strzipcode', `TableZipcodes`"

当你编译你的C ++代码时,这只不过是一个字符串,变量没有插入,因为你似乎认为它们是。

一个相对简单但不好的解决方案是将字符串连接在一起,就像

一样
"SELECT * FROM `table` WHERE FIND_IN_SET( '" + strzipcode + "', `TableZipcodes`"

这里我们使用的是实际变量strzipcode

请不要这么做!

你真的应该使用所谓的预备语句。我快速浏览了一下您正在使用的库,但没有看到它应该如何完成。但你首先要做的事情有点像

mysqlpp::prepare("SELECT * FROM `table` WHERE FIND_IN_SET( '$1', `TableZipcodes`");

然后告诉它占位符是什么

myPreparedStatment.setValue(1, strzipcod); // where 1 maps to the location of $1

是的,我在这里编写的代码已经完成,你现在必须去做一些工作,找出如何自己实际做到这一点。我还建议你准备好阅读为什么你想要搞砸所有这些额外的工作。

修改

哦......刚才注意到你的初始查询字符串首先是错误的。你永远不会关闭'FIND_IN_SET'部分。我会留给你研究如何修复 部分。