-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 に答える