2011-12-16 4 views
1

Я пытаюсь выполнить переменную передачи запроса mysql. Вот мой кодКак передать переменную в mysql_query

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 

компиляции Что я пропустил?

ответ

4

Вы не можете сделать это printf() возвращает количество напечатанных символов Вы должны создать строку перед вызовом mysql_query():..

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

Кроме того, будьте осторожны при создании этих строк запроса. не использовать такие функции, как sprintf(), если вы не можете быть уверены в том, как долго результирующая строка. не пишите Ове r границ сегмента памяти.

+0

ITYM 'голец утверждение [512],' ... – glglgl

+0

Вы правы. Спасибо, я исправил его. – ckruse

-1

вы должны поставить «'перед и после строки как это

mysql_query(conn, printf("INSERT INTO table VALUES ('%s')"), str); 
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(), если дело с правильно.)

Смежные вопросы