2012-04-10 1 views
1


Я хочу, чтобы вставить в базу данных MySQL из C.
Вот мой код:
Выполнить запрос вставки с помощью C

...

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

... Проблема заключается в том : Запрос вставки не выполняется, и в базе данных ничего не отображается.
Спасибо.

ответ

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% не велика

+0

Еще один маленький базовый вопрос: как удалить все строки content_hits? Спасибо. – holy

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

+0

Просто еще один маленький основной вопрос: Как удалить все строки content_hits? Спасибо. – holy

+0

Если вы спрашиваете, как удалить все строки из CONTENT_HITS, вам действительно нужно купить несколько книг об изучении SQL. Шутки в сторону. Если вы не можете этого беспокоиться, используйте Google «Основы SQL» – DaveyBoy

+0

Я имею в виду, как это сделать в C – holy

Смежные вопросы