Cómo pasar la variable en mysql_query

Intento ejecutar la variable de paso de consulta mysql. Aqui esta mi codigo

char str[100] = "My String"; mysql_query(conn, printf("INSERT INTO table VALUES %s"), str); 

Recibo esa advertencia durante el proceso de comstackción

 warning: passing argument 2 of 'mysql_query' makes pointer from integer without a cast 

¿Qué extraño?

Usted no puede hacer eso. printf() devuelve el número de caracteres impresos. Tienes que crear la cadena antes de llamar a mysql_query() :

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

Además, tenga cuidado al crear esas cadenas de consulta. No uses funciones como sprintf() si no puedes estar seguro de cuánto tiempo es la cadena resultante. No escriba sobre los límites del segmento de memoria.

Extendiendo la respuesta de @ckruse, debes tener cuidado de usar mysql_real_escape_string() si tu cadena proviene de fonts arbitrarias.

 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); } 

(Una alternativa podría ser mysql_hex_string() si se trata correctamente).

Debes poner “” al frente y después de la cuerda como esta

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