2

コンパイルすると、次のようになります。

/usr/include/mysql/mysql.h:452: error: too many arguments to function int mysql_query(MYSQL*, const char*)

の引数に制限はありmysql.hますか?もしそうなら、どうすればそれを回避できますか?

#include    <mysql/mysql.h>


string unknown = "Unknown";

MYSQL *conn;

conn = mysql_init(NULL);
mysql_real_connect(conn, "localhost", "root", "password", "alert", 0, NULL, 0);

mysql_query(conn, "INSERT INTO alert_tbl (alert_srcip, alert_country, alert_destip, alert_desthost, alert_destport, alert_bl) VALUES ('%s','%s','%s','%s','%s','%s')", src_ip,country_code,dest_ip,unknown,dest_prt,blip);

mysql_close(conn);

g++ test.c -o test -lstdc++ -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
4

4 に答える 4

5

mysql_stmt_prepareを使用してから、mysql_stmt_bind_paramを使用してパラメーター値を 1 つずつバインドする必要があります。

ステートメントの準備ができたら、 mysql_stmt_executeで実行します。

または、sprintf() を使用します。

char query[1024 /* or longer */];

sprintf(query,
     "INSERT INTO alert_tbl"
     "(alert_srcip, alert_country, alert_destip, alert_desthost, alert_destport, "
     "alert_bl) VALUES ('%s','%s','%s','%s','%s','%s')",
     src_ip,country_code,dest_ip,unknown,dest_prt,blip);

mysql_query(conn, query);
于 2012-06-29T14:32:54.357 に答える
0

ここで答えを見つけました:

http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-examples-prepared-statements.html

于 2012-10-16T21:41:18.043 に答える
0

または単に使用します:

char query[1000];
snprintf(query, 1000, "INSERT INTO alert_tbl (alert_srcip, alert_country, alert_destip, alert_desthost, alert_destport, alert_bl) VALUES ('%s','%s','%s','%s','%s','%s')", src_ip, country_code, dest_ip, unknown, dest_prt, blip);
mysql_query(conn, query);
于 2012-06-29T14:35:49.437 に答える
0

あなたがそれを使用している方法では、実際には多くの引数を に渡していますmysql_query(..)

std::stringstream を使用してクエリを作成します。(警告: 適切にエスケープされていることを確認する必要があります)。

std::stringstream ss;
ss<<"INSERT INTO alert_tbl (alert_srcip, alert_country, alert_destip, alert_desthost, alert_destport, alert_bl) VALUES ('"<<src_ip<<"','"<<country_code //and so on..

mysql_query(conn, ss.str().c_str());
于 2012-06-29T14:37:28.433 に答える