我想从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)");}
... 问题是:插入查询未执行,数据库中没有任何内容 谢谢。
答案 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)
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%不是很好