2011-12-16 215 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()如果正确处理。)