2011-12-16 4 views
1

私は変数を渡すmysqlクエリを実行しようとします。ここに私のコードはmysql_queryで変数を渡す方法

char str[100] = "My String"; 

mysql_query(conn, printf("INSERT INTO table VALUES %s"), str); 

である私は、私は欠場何コンパイル処理中にその警告

warning: passing argument 2 of ‘mysql_query’ makes pointer from integer without a cast 

を取得しますか?

答えて

4

前に、文字列の後に 『」』を置くべきprintf()あなたはmysql_query()を呼び出す前に、文字列を作成する必要が印刷された文字の数を返します。

これらのクエリ文字列を作成するときに
char statement[512], *my_str = "MyString"; 
snprintf(statement, 512, "INSERT INTO table VALUES ('%s')", str); 
mysql_query(conn, statement); 

また、注意してください。あなたは結果の文字列がどのくらい確認することができない場合sprintf()のような関数を使用しないでください。オベを書いてはいけませんrはメモリセグメントの境界です。

+0

ITYM 'char型の文[512]、' ... – glglgl

+0

あなたが正しいです。ありがとう、私はそれを修正しました。 – ckruse

-1

あなたはあなたがそれを行うことはできません

このような
mysql_query(conn, printf("INSERT INTO table VALUES ('%s')"), str); 
4

@ ckruseの答えを拡張すると、文字列が任意のソースから来た場合は、​​を注意して使用する必要があります。

int insert_data(MYSQL * mysql, char * str, int len) 
{ 
    if (len < 0) { 
     len = strlen(str); 
    } 

    char esc[2*len+1]; 
    unsigned long esclen = mysql_real_escape_string(mysql, esc, str, len); 

    char statement[512]; 
    snprintf(statement, sizeof statement, "INSERT INTO table VALUES ('%s')", esc); 
    return mysql_query(mysql, statement); 
} 

(正しく扱った場合の代替はmysql_hex_string()である可能性があります。)

関連する問題