Автор Тема: C API за MYSQL  (Прочетена 3928 пъти)

rpetrov

  • Напреднали
  • *****
  • Публикации: 571
    • Профил
    • WWW
C API за MYSQL
« Отговор #15 -: Mar 02, 2005, 22:50 »
Нищо не разбрах от цялата идея да се прави конвентиране низ-число-низ.

В такава ситуация обикновено се използва "prepared statement" с параметри, към които се свърват/привързват променливите. Това трябва да го има под една или друга форма.

Пример на псевдо код:
sqlcmd = "insert into ... values(:1, :2)"
stmnt = PREPARE STATEMENT(sqlcmd)
BIND_DOUBLE_PARAM(stmnt, 1, double_value);
BIND_INT_PARAM(stmnt, 2, int_value);
EXECUTE(stmnt);

Бел.: при някой бази вместо :1, :2 и т.н. се използва ?, т.е. горната команда би имала вида sqlcmd = "insert into ... values(?, ?)".

Ако има embedded sql може да се напише нещо такова:
EXEC SQL BEGIN DECLARE SECTION;
  double_value double;
  int_value int;
EXEC SQL END DECLARE SECTION;
EXEC SQL INSERT INTO mytbl (price, unit) VALUES (:double_value, :int_value);
След това SQL препроцесора ще генерира съответния код.
Активен

akif

  • Напреднали
  • *****
  • Публикации: 16
    • Профил
C API за MYSQL
« Отговор #16 -: Mar 02, 2005, 22:53 »
Цитат (mironcho @ Март 02 2005,23:27)
Айде сега - в първия ти пост написа (цитирам) - " моя случай аз плучавам от потребителя тази променлива във вид на низ и като я преобразувам чрез  cena = atof(my_cena);".... значи все пак първо я имаш като низ '<img'>

И все пак, дори ако я нямаш първоначално в низ, какъв ти е проблема да sprintf -неш по отделно в низове и низовете да си ги обработиш по по-горе посочените начини. Може би става дълго, но ако наистина няма друг начин да се справиш с проблема, и това е вариант '<img'>

Иначе, това което казва ivak звучи логично - погледни все пак какъв ти е локала при изпълнението на програмата, и дори за по сигурно, в началото можеш да си го сетваш на някой стандартен.. примерно на 'C' '<img'>. Начини разни - setenv(), setlocale()...


Успех

Това с НИЗА се оплете нещо.
Аз мислех че ако напирмер променливат се съхранява  от тип double
тябва да изпратя заявката във следия вид:
 блабла values(33.32);, но полседно видях че и това:
  блабла values('33.32''<img'>; работи,
ОБАЧЕ АКО имаш низ  char str[] ="33,32"  sprint'vas
sprintf(buff, "%f", atof(str));
buff = "33,32"  и ако изпратиш към сървъра balbal values('buff''<img'>;
Получаваш грешка. защото сървъра ги вижда като 2 стойности 33 и 32, а не числото 33,32

Все пак горещо умолявам за съдействие
как да ги използвам функциите setlocale(), или
locale().
Погледнах ги във main'a. но нещо ми се губи.
Може ли конкретен код.   '<img'>
Благодаря!!!
Активен

akif

  • Напреднали
  • *****
  • Публикации: 16
    • Профил
C API за MYSQL
« Отговор #17 -: Mar 02, 2005, 23:12 »
Цитат (rpetrov @ Март 02 2005,23:50)
Нищо не разбрах от цялата идея да се прави конвентиране низ-число-низ.

В такава ситуация обикновено се използва "prepared statement" с параметри, към които се свърват/привързват променливите. Това трябва да го има под една или друга форма.

Пример на псевдо код:
sqlcmd = "insert into ... values(:1, :2)"
stmnt = PREPARE STATEMENT(sqlcmd)
BIND_DOUBLE_PARAM(stmnt, 1, double_value);
BIND_INT_PARAM(stmnt, 2, int_value);
EXECUTE(stmnt);

Бел.: при някой бази вместо :1, :2 и т.н. се използва ?, т.е. горната команда би имала вида sqlcmd = "insert into ... values(?, ?)".

Ако има embedded sql може да се напише нещо такова:
EXEC SQL BEGIN DECLARE SECTION;
  double_value double;
  int_value int;
EXEC SQL END DECLARE SECTION;
EXEC SQL INSERT INTO mytbl (price, unit) VALUES (:double_value, :int_value);
След това SQL препроцесора ще генерира съответния код.

Какво ще направим ако потребителя въведе невалидно число или някаква безсмислица и ние го
поставим във заявката като влаидна стойност?
Имаш ли идея как да постъпя?
Да проверявам всеки символ който се въвежда от потребителя, да проверявям целия низ след като се въведе от потребителя или нещо друго?
Например:
Продавам 5 различни стоки, за всяка отделна стока
правя заявки към сървъра:
       2Актуализирам количеството (наличноста)
       3Добавям запис към изходящия документ, който
    съдържа запис за всяка продадена стока със този документ.
Ако Например ТРЕТАТА стока се продава със невалидна стойност?
Отбелязвам че вече са направни АКТУАЛИЗАЦИИ за предните 2!
Активен

  • Гост
C API за MYSQL
« Отговор #18 -: Mar 03, 2005, 18:04 »
Цитат (Guest @ Март 02 2005,23:12)
Цитат (Guest @ Март 02 2005,11:59)
много идеи и всичките сложни '<img'>

sprintf(query, "iнsert ito my_table values(%d, %d, %d, %f, %f)",
cl_id, st_id, doc_id,  cena, colicestvo);
сложи double стойностите в единични кавички и enjoy '<img'>
sprintf(query, "insert ito my_table values('%d', '%d', '%d', '%f', '%f''<img'>",
cl_id, st_id, doc_id,  cena, colicestvo);

daf Това нещо със еденични кавички не работи коректоно.
опитна да изпратиш заявка от вида:
insert ito my_table values('1' ,  '33,32''<img'>;
и ще видиш.   '<img'>
Проблема го реших като низа не го преобразувам
във доубле, а променям само ЗАПЕТАЯТА в низа с ТОЧКА и го поставям в заявката.
Например:
sprintf(query, "insert into my_table values(%d, '%s''<img'>", atoi(niz1), niz2);
Като niz2 се очаква да чесло.  '<img'>
Благодарности на всички.  '<img'>

тогава друга идея, която заобикаля проблема..
когато insert-ваш не можеш ли да направиш:
sprintf(query, "insert into my_table values(%d, %d, %d, replace('%f', ',', '.''<img'>, %f)", cl_id, st_id, doc_id,  cena, colicestvo);

т.е. да замениш запетаята с точка в самия mysql
Активен

akif

  • Напреднали
  • *****
  • Публикации: 16
    • Профил
C API за MYSQL
« Отговор #19 -: Mar 03, 2005, 21:29 »
Цитат (Guest @ Март 03 2005,19:04)
Цитат (Guest @ Март 02 2005,23:12)
Цитат на: Guest,Март 02 2005,11:59
много идеи и всичките сложни '<img'>

sprintf(query, "iнsert ito my_table values(%d, %d, %d, %f, %f)",
cl_id, st_id, doc_id,  cena, colicestvo);
сложи double стойностите в единични кавички и enjoy '<img'>
sprintf(query, "insert ito my_table values('%d', '%d', '%d', '%f', '%f''<img'>",
cl_id, st_id, doc_id,  cena, colicestvo);

daf Това нещо със еденични кавички не работи коректоно.
опитна да изпратиш заявка от вида:
insert ito my_table values('1' ,  '33,32''<img'>;
и ще видиш.   '<img'>
Проблема го реших като низа не го преобразувам
във доубле, а променям само ЗАПЕТАЯТА в низа с ТОЧКА и го поставям в заявката.
Например:
sprintf(query, "insert into my_table values(%d, '%s''<img'>", atoi(niz1), niz2);
Като niz2 се очаква да чесло.  '<img'>
Благодарности на всички.  '<img'>тогава друга идея, която заобикаля проблема..
когато insert-ваш не можеш ли да направиш:
sprintf(query, "insert into my_table values(%d, %d, %d, replace('%f', ',', '.''<img'>, %f)", cl_id, st_id, doc_id,  cena, colicestvo);

т.е. да замениш запетаята с точка в самия mysql

daf супер си (replace('%f', ',', '.''<img'> ) е решението на проблема. Работи така както се очаква.
Благодаря на всички за отзивчивоста.  '<img'>
Активен

  • Гост
C API за MYSQL
« Отговор #20 -: Mar 04, 2005, 00:30 »
Цитат (Guest @ Фев. 28 2005,01:54)
replace() в повечето езици я има тая функция. Не съм сигурен обаче за С '<img'> Иначе прави точно това - заменя синвол/и с друг/и

П.П. погледни тук http://bg2.php.net/manual/en/function.str-replace.php за да видим дали правилно се насочвам какво ти трбва - знам че това е за ПХП а не за С '<img'>

Това е точно 1-вия отговор, май не си си направил труда да потърсиш , отдавна да си свършил работа, но нищо гледам е станало интересно - поне има доста мнения и идеи '<img'>

И все пак от мен получаваш едно  ':angry:' !

Tъй то '<img'> .
Активен

akif

  • Напреднали
  • *****
  • Публикации: 16
    • Профил
C API за MYSQL
« Отговор #21 -: Mar 04, 2005, 22:36 »
Цитат (Guest @ Март 04 2005,01:30)
Цитат (Guest @ Фев. 28 2005,01:54)
replace() в повечето езици я има тая функция. Не съм сигурен обаче за С '<img'> Иначе прави точно това - заменя синвол/и с друг/и

П.П. погледни тук http://bg2.php.net/manual/en/function.str-replace.php за да видим дали правилно се насочвам какво ти трбва - знам че това е за ПХП а не за С '<img'>

Това е точно 1-вия отговор, май не си си направил труда да потърсиш , отдавна да си свършил работа, но нищо гледам е станало интересно - поне има доста мнения и идеи '<img'>

И все пак от мен получаваш едно  ':angry:' !

Tъй то '<img'> .

ИЗВИНЯВАЙ *real* в отговари си говореше за php и за
това не я потърсих тази функция в C  '<img'> .
И З В И Н Я В А Й.
Надявам се че не съм те огорчил невъзвратимо  '<img'> .
Активен

the_real_maniac

  • Напреднали
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
C API за MYSQL
« Отговор #22 -: Mar 05, 2005, 00:36 »
hehe-he спокойно бе '<img'> Няма да те ям '<img'>

Просто ми направи впечатление , а и човека е писал - виж дали я има и за С , тъй като я има в повечето езици '<img'>

Успех с проектчето.
Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
MySql малък проблем.
Хардуерни и софтуерни проблеми
Marto 6 4231 Последна публикация Sep 25, 2002, 12:32
от
mysql въпрос
Настройка на програми
dumi 0 1322 Последна публикация Oct 08, 2003, 06:42
от dumi
Perl + CGI,DBI + Mysql ili PHP + Mysql
Общ форум
jica 3 4952 Последна публикация Sep 07, 2004, 17:02
от jica
Mysql проблем със стартирането(mysql.sock missing)
Настройка на програми
coveka 6 6750 Последна публикация Mar 01, 2008, 22:02
от coveka
Mysql: can't connect to local mysql server
Настройка на програми
wonder 1 5129 Последна публикация Mar 16, 2008, 01:17
от neter