1


我想从 C 插入 mysql 数据库。
这是我的代码:

...

for (i=0;i<nb_of_subscribers*hits_subscriber;i++)

   { RandomSub= rand() % nb_of_subscribers + 1;
   RandomContent= rand() % (contents_tag*tags) + 1;

    mysql_query(conn, "INSERT INTO CONTENT_HITS(CONTENT_ID,SUBSCRIBER_ID) VALUES(RandomContent,RandomSub)");}

...问题是:插入查询未执行,数据库中没有任何内容。
谢谢你。

4

2 回答 2

3

在字符串中写入变量的名称与写入其值不同。

将值放入查询字符串的一种方法是使用 sprintf() ,如下所示:

for ( i = 0; i < nb_of_subscribers * hits_subscriber; i++ ) {
    char query[80] = {0};

    RandomSub= rand() % nb_of_subscribers + 1;
    RandomContent= rand() % (contents_tag * tags) + 1; 
    sprintf(query, "INSERT INTO CONTENT_HITS(CONTENT_ID,SUBSCRIBER_ID) VALUES (%d,%d)", RandomContent, RandomSub);
    mysql_query(conn, query);
}

但你真的应该使用这里记录的准备好的语句:http:
//dev.mysql.com/doc/refman/5.1/en/c-api-prepared-statements.html

于 2012-04-10T11:44:46.510 回答
1

RandomSub和(您已声明的)的值如何RandomContent实际进入您正在执行的查询?你正在尝试运行

INSERT INTO CONTENT_HITS(CONTENT_ID,SUBSCRIBER_ID) VALUES(RandomContent,RandomSub)

这将失败,因为它试图将两个字符串放入(我猜)两个整数字段中。

您需要将RandomContent和的值替换RandomSub为字符串:

char q[1024];
for (i=0;i<nb_of_subscribers*hits_subscriber;i++)
{

    RandomSub= rand() % nb_of_subscribers + 1;
    RandomContent= rand() % (contents_tag*tags) + 1;

    sprintf(q,"INSERT INTO CONTENT_HITS(CONTENT_ID,SUBSCRIBER_ID) VALUES(%d,%d)",RandomContent,RandomSub);

    mysql_query(conn, q);
}

正如@SpacedMonkey 所说-您应该为此使用准备好的语句

老实说,非常基本的C语言。

PS - 做一些接受 - 10% 不是很好

于 2012-04-10T11:53:53.127 回答