int stu_select()
{
MYSQL_ROW results,record;
char query[50];
int flag;

sprintf( query,"call stu_query(@s)");

        flag=mysql_real_query(&mysql,query,(unsigned int)strlen(query));
//printf( ">>>%d<<<\n",flag );
if( flag )
{
printf("Error exec query: %s\n",mysql_error(&mysql));
}
mysql_query(&mysql, "SELECT @s");
  results = mysql_store_result(&mysql);

printf( "Stuid    Name      Maths     English    Physis    Total     aver\n" );
while((record = mysql_fetch_row(results))) 
{
        printf("%3s%10s%9s%11s%11s%10s%11s\n", record[1],record[2],record[3],record[4],record[5],record[6],record[7] );

    }

mysql_free_result(results); return 0;
}其中&mysql为一个全局变量
第一次调用该函数时,能够得到从数据库的返回值。第二次调用时报错:Commands out of sync; you can't run this command now  问题出在这一句:mysql_real_query(&mysql,query,(unsigned int)strlen(query));  我怀疑是&mysql第一次调用时添加了一些值,但是不能再次初始化(因为链接着数据库)。请教高手解答。

解决方案 »

  1.   

    检查看一下MYSQL的错误日志。 应该是你的联接无效了。你有没有什么什么代码是 close 联接的?
      

  2.   

    在 mysql_free_result(results) 后面加上这些代码:
    while(mysql_next_result(&mysql)==0)
    {
        if(results=mysql_store_result(&mysql))
            mysql_free_result(results);
    }
      

  3.   

    这是 mysql C API 调用存储程序后对于 result 的一些关于安全性的处理