如何在mysql_query中传递变量

时间:2011-12-16 08:52:22

标签: mysql c

我尝试执行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

我想念的是什么?

3 个答案:

答案 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);