Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQL API C, Не могу связать параметры 
V
    Опции темы
toshun
Дата 25.7.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 10.2.2006

Репутация: нет
Всего: нет



Здравствуйте, уважаемые программисты.

Реализовываю Интерфейс MySQL API C. Все сделано, но осталось только реализовать bind параметры.

Сначало все шло неплохо, так чтобы один параметр связывался у меня получилось. Но дальше хуже.

При попытке связать два параметра у меня получается что первый параметр равен второму. Мои предположения что ошибка потому что в mbind[index].buffer используется ссылка.

Код

void bindParam(char *a, int type){
...
  if(type == 1){ //тип string
    str_length= strlen(a);    
    mBind[index].buffer_type = MYSQL_TYPE_STRING;
    mBind[index].buffer = (char *)a;
    mBind[index].buffer_length= 10;
    mBind[index].is_null = 0;
    mBind[index].length = &str_length;
  }
....
}


Так вот, при последовательном вызове bindParam("spider", 1), bindParam("man", 1) то в таблицу записывается man, man то есть spider почему то заменяется на man. 
PM MAIL   Вверх
toshun
Дата 25.7.2010, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 10.2.2006

Репутация: нет
Всего: нет



Дело в чем-то еще оказывается.
Когда делаю
Код

for(int i = 0; i < mParamCount; i++){
            //    strncpy(str, NS_ConvertUTF16toUTF8(array[i]).get(), 50);
                printf("hehehe %d  %s\n", i, (char *)NS_ConvertUTF16toUTF8(array[0]).get());
                mBind[0].buffer_type = MYSQL_TYPE_STRING;
                mBind[0].buffer = (char *)NS_ConvertUTF16toUTF8(array[0]).get();
             mBind[0].buffer_length = strlen((char *)NS_ConvertUTF16toUTF8(array[0]).get());
             mBind[0].is_null = 0;
             mBind[0].length = &str_length;
             str_length= strlen((char *)NS_ConvertUTF16toUTF8(array[0]).get());    
             
             mBind[1].buffer_type = MYSQL_TYPE_STRING;
                mBind[1].buffer = (char *)NS_ConvertUTF16toUTF8(array2[1]).get();
             mBind[1].buffer_length = strlen((char *)NS_ConvertUTF16toUTF8(array2[1]).get());
             mBind[1].is_null = 0;
             mBind[1].length = &str_length2;
             str_length2= strlen((char *)NS_ConvertUTF16toUTF8(array2[1]).get());
             
             if(i == 1){
              printf("ahaha %d  %s\nahaha %d  %s\n", 0, mBind[0].buffer, 1, mBind[1].buffer);
             }
            
            }


где array и array2 это одинаковые массивы которые равны {"spider","man"} то при печати результата выходит что 
ahaha 0 man
ahaha 1 man

Кто-нибудь знает в чем дело?
PM MAIL   Вверх
toshun
Дата 4.8.2010, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 10.2.2006

Репутация: нет
Всего: нет



Дело было в выделении памяти. Помогло 
Код

mBind = new MYSQL_BIND [nParamCount];
memset(mBind, 0, sizeof(mBind));


new лучше malloc'a.
PM MAIL   Вверх
toshun
Дата 7.8.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 10.2.2006

Репутация: нет
Всего: нет



Блин. Фигня полная творится. Когда у меня есть допустим SELECT * FROM table WHERE id > ?
Я делаю поселодаветльно init, prepare (после mysql_stmt_prepare вызываю mysql_stmt_result_metadata), далее bindParam, и наконец execute. Причем после собственно execute мне необходимо получить выбранные значения, это я делаю при помощи mysql_stmt_bind_result и mysql_stmt_store_result. Компилируется отличненько, но через раз во время fetchRow у меня возникает либо bus error, либо segmentation fault. При попытке разобраться я понял, что если убрать mysql_stmt_bind_result то больше подобных ошибок не возникает, но при этом я не могу получить значения выбранных строк. Получается что mysql_stmt_bind_result и mysql_stmt_bind_param несовместими? Или как?

Кто сталкивается, помогите разобраться пожалуйста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1592 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.