使用C执行插入查询

时间:2012-04-10 11:27:06

标签: mysql c insert


我想从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)");}

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

RandomSubRandomContent(您已声明的)的值如何实际进入您正在执行的查询中?你正试图运行

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

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

您需要将RandomContentRandomSub的值替换为字符串:

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%不是很好