Команды, не синхронизированные с MySQL при повторном вызове хранимой процедуры на C

#mysql #c #database #synchronization #connector

#mysql #c #База данных #синхронизация #соединитель

Вопрос:

Я создал базу данных с использованием MySQL, и теперь мне нужно запустить созданные мной хранимые процедуры, запрограммировав базовый клиент C, который запрашивает команду, и вызвать хранимые процедуры.

В частности, после входа в систему, хотя я не ввожу ’10’ для выхода из системы, моя программа запрашивает, какой SP я хочу вызвать. Это мой код:

 void root_logged ()
    {
        while (true)
        {   
            scanf ("%i",amp;cmd2);
            if (cmd2 == 2)
            {
                show_exams();
            }
            else if (cmd2 == 10)
            {
                do_logout();
                break;
            }
        }
    }


void show_exams ()
{
    strcpy(query,"call show_exams()"); //call mySQL SP
    mysql_query (conn,query);
    result = mysql_store_result(conn);

    if (result == NULL)
    {
        finish_with_error(conn, "errore");
    }

    printf ("check 2:n");
    num_fields = mysql_num_fields(result);
    printf ("check 3 n");
    while ((row = mysql_fetch_row(result))) 
    { 
        for(int i = 0; i < num_fields; i  ) 
        {   
            if (i == 0) 
            {              
                while(field = mysql_fetch_field(result))
                {
                    printf( "|  %s  ", field->name);
                }
                printf("n");           
            }
            printf(" %s ", row[i] ? row[i] : "NULL"); 
        }
        printf ("n");
    }
    mysql_free_result(result);
}
  

Если я введу ‘2’ в первый раз после входа в систему, он корректно покажет мне всю таблицу ‘экзамены’ со всеми данными, хранящимися в.

После получения результата программа запрашивает другую команду. Если я снова ввожу 2 (или любой другой cmd, кроме 10, для выхода из системы), это выдает мне эту ошибку.

Команды не синхронизированы; вы не можете запустить эту команду сейчас

Есть идеи? Я думаю, что проблема в том, что она about mysql_store_result() и mysql_free_result() не используется должным образом

Комментарии:

1. Какая часть вашего кода выдает это сообщение об ошибке?

2. result = mysql_store_result(conn) , когда я вызываю процедуру во второй раз. Это потому, что приведенная ниже проверка оператора if if result == NULL возвращает код ошибки, произошедшей во время mysql_store_result(result) . Итак, я думаю, что у меня проблема с использованием mysql_free_result()