#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。如何在这里传递变量。请帮忙
答案 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'部分。我会留给你研究如何修复 部分。