如何在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);