我尝试执行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
我想念的是什么?
答案 0 :(得分:4)
你做不到。 printf()
返回打印的字符数。您必须在调用mysql_query()
之前创建字符串:
char statement[512], *my_str = "MyString";
snprintf(statement, 512, "INSERT INTO table VALUES ('%s')", str);
mysql_query(conn, statement);
另外,创建这些查询字符串时要小心。如果您无法确定结果字符串的长度,请不要使用sprintf()
之类的函数。不要写内存段的边界。
答案 1 :(得分:4)
扩展@ 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()
。)
答案 2 :(得分:-1)
你应该把“''放在前面和后面 像这样
mysql_query(conn, printf("INSERT INTO table VALUES ('%s')"), str);