2011-12-16 219 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()如果你不能確定生成的字符串有多長。不要寫OVE r內存段的邊界。

+0

ITYM`焦炭語句[512],`... – glglgl 2011-12-16 09:20:41

-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()如果正確處理。)