如何在mysql_query中传递变量

我尝试执行mysql查询传递变量。 这是我的代码

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 

我想念的是什么?

你不能这样做。 printf()返回打印的字符数。 你必须在调用mysql_query()之前创建字符串:

 char statement[512], *my_str = "MyString"; snprintf(statement, 512, "INSERT INTO table VALUES ('%s')", str); mysql_query(conn, statement); 

另外,在创建这些查询字符串时要小心。 如果您无法确定结果字符串的长度,请不要使用sprintf()等函数。 不要写内存段的边界。

扩展@ ckruse的答案,如果你的字符串来自任意来源,你应该注意使用mysql_real_escape_string()

 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() 。)

你应该把“”放在前面和后面这样的字符串之后

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