Титла: C и Mysql Публикувано от: PAIN1 в Jan 11, 2006, 19:18 На пръв поглед нещата трябва да работят, но не приема query-то което му подвам, примерен код:
Примера е директно копиран от интернет, самото query изпълнено в конзолата си работи ...., но като изпълня програмата връща
Тоест ерор в самото query, а не във програмата ..... ? Програмата се връзва към базата данни и си селектва базата която искам (поне не връща грешка ) . Идеи ?
това връзка към кода който опитвам. http://www.synnottsoftware.com/tutorials/mysqlbasic.php Титла: C и Mysql Публикувано от: PAIN1 в Jan 11, 2006, 22:03 Проблемът се изврати много тъпо когато опитах да упдейтна пакета,
по всички правила го инсталирах и резултата:
Титла: C и Mysql Публикувано от: tseso в Jan 13, 2006, 00:01 Тук нещо не се вързва:
sprintf(query, "INSERT INTO demotable VALUES ('%s' , 12)", encdata); INSERT INTO table(Field1, Field2) VALUES (value1, value2) Field1- име на поле за value1 Field2 -име на поле за value2 Титла: C и Mysql Публикувано от: PAIN1 в Jan 13, 2006, 10:45 Не е това проблема, не е нужно да посочвам полетата, когато броя полета които добавям отговаря, но дори и това да е(а то не е), пробвах всякакви варианти, дори и по-прости query-ta, нищо не изпълнява.Днеска
ще пробвам да си компилирам mysql , а не от пакет, но ме съмнява ... Титла: C и Mysql Публикувано от: i_danov в Jan 13, 2006, 13:47 Защо не си напечаташ query-то на конзола преди да го пратиш към сървъра? Избрал ли си коя е базата данни?
Освен това този ред:
е хубаво да го смениш на:
Титла: C и Mysql Публикувано от: в Jan 13, 2006, 15:38
а защо дължината на query-то, която подаваш ти е strlen(query)+255 ??!!?!?!?!?!?!? подай като дължина на query-то само strlen(query); това ти е грешката. така функцията взема още 255 символа след края на SQL заявката, което си е неправилно. @i_danov
може и да е хубаво щом ти харесва, но и както той го е записал е правилно и няма абсолютно никакъв проблем. Титла: C и Mysql Публикувано от: tseso в Jan 13, 2006, 17:55 по метода на налучкванияата мога да предложа да замениш символа ' с \' между двойните скоби
Функцията sprintf слага нулев символ '\0' в края на набора от символи и не е от значение колко памет е заделена за query стига да са повече от необходимите +1, но за всеки случай може да се напише така: (query, "INSERT INTO demotable VALUES (\'%s\' , 12)\0", encdata); Титла: C и Mysql Публикувано от: в Jan 13, 2006, 18:57
парсъра на C и в двата случая ще подразбере едно и също. колкото до другото, не знам дали си се занимавал със C/MySQL след като толкова мъдруваш по въпроса, но това не е като да драскаш на PHP/MySQL! и е хубаво да прочетеш малко из API функциите на MySQL за линкване със C преди да даваш съвети, щото просто ще губиш времето на човека в тъпи проби. mysql_real_query не прекъсва query-то до нулевия символ (т.е. \0, както го записваш), ТЪЙ КАТО С ТАЗИ ФУНКЦИЯ МОЖЕ ДА СЕ ПОДАДАТ БИНАРНИ ДАННИ, КЪДЕТО МОЖЕ ДА ИМА ВСЯКАКВИ СИМВОЛИ, ВКЛЮЧИТЕЛНО И \0. затова е много важно да е абсолютно точен размера - т.е. да е strlen(query). това е проблема Титла: C и Mysql Публикувано от: PAIN1 в Jan 13, 2006, 19:36 Цветозар едно голямо мерси, бях се отчаял.Само ме е яд че не сетих аз там
![]() Титла: C и Mysql Публикувано от: tseso в Jan 13, 2006, 21:26 API Function Descriptions:
http://dev.mysql.com/doc/refman/5.0/en/mysql-query.html http://dev.mysql.com/doc/refman/5.0/en/mysql-real-query.html Както се вижда от по горе описаните финкции, Цветозар е прав (като изключим острия тон), че mysql-real-query може да съдържа \0. Ако се използва mysql-query се подава параметър нулево завършващ стринг без дължина. |