-2
#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。如何在这里传递变量。请帮忙

4

1 回答 1

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”部分。我会把它留给你来解决如何修复那个部分。

于 2014-02-05T09:13:01.970 回答