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

文字列に変数の名前を書き込むことは、その値を書き込むことと同じではありません。

値をクエリ文字列に取り込む1つの方法は、次のように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)

これは、2つの文字列を(おそらく)2つの整数フィールドに入れようとしているため失敗します。

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 に答える