Лучше, а также краткий способ написать запрос .. (язык Mysql + C) - PullRequest
0 голосов
/ 19 сентября 2011

Есть ли более краткий способ написать следующий запрос (используя Mysql + C):

 memset(query, 0, 200);
            strcat(query, "UPDATE Sconti SET ");
            strcat(query, "Sconto = '");
            strcat(query, nuovo_sconto);
            strcat(query, "' WHERE For_Sconti ='");
            strcat(query, For_Sconti);
            strcat(query, "' AND Cat_Sconti='");
            strcat(query, Cat_Sconti);
            strcat(query, "';");

            if (mysql_query (conn, query)) {
                        printf("\nErrore query:\n");
                printf("%s", mysql_error(conn),"\n");

Проблема в том, что если мне нужно обновить таблицу, имеющую 12 полей, все становится раздражающим ..

Спасибо, Вера

Ответы [ 4 ]

4 голосов
/ 19 сентября 2011

В зависимости от версии MySQL, которую вы используете, вы можете использовать подготовленные операторы. Ознакомьтесь с главой 20.9 Справочное руководство по MySQL .

С подготовленными утверждениями вы можете настроить запрос следующим образом:
char *queryText = "Update Sconti set Sconto = ? where for_sconti = ? and cat_sconti = ?";

2 голосов
/ 19 сентября 2011
char string[512];

//code to clean the string :)
sprintf(string,"UPDATE Sconti SET Sconto = '%f' WHERE For_Sconti ='%f' AND Cat_Sconti='%f';",scontoValue,forScontiValue,catScontiValue);

Поиск sprintf на этой странице:

http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html

1 голос
/ 19 сентября 2011

всегда sprintf

это великолепная функция, которая действует как printf, но записывает поверх строки вместо записи в стандартный вывод.Его очень просто использовать всем, так как не существует c-разработчика, который не знал бы printf со времен своего первого привета!Адаптация к вашему коду будет выглядеть так:

char yourString[512];
sprintf(yourString,"UPDATE Sconti SET Sconto = '%f' WHERE For_Sconti ='%f' AND Cat_Sconti='%f';",nuovo_sconto,For_Sconti,Cat_Sconti);

Cheers,

1 голос
/ 19 сентября 2011

Да, вы можете использовать sprintf и делать что-то вроде ...

sprintf(query, "UPDATE Sconti Set "
   " Sconto = '%s'"
   "WHERE FOR_Sconti = '%s'|
   /* etc .... */
   ";", nuove_sconto, For_Sconti, Cat_Sconti);

Примечание. Я использую трюк C, который в C "a""b" эквивалентен "ab" и, таким образом, эквивалентен

"a"
"b"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...