解决error:2014 Commands out of sync; you can't ru...

今天遇到这个问题。。 html

http://blog.csdn.net/grass_ring/article/details/3499402 mysql


  前两天搞mysql的东西,用mysql提供的C API 访问,遇到些问题,在这里分享一下,但愿对其余人有帮助。 sql

   mysql C API 调用存储过程,并返回结果集。须要注意几个问题: app

在创建连接的时候要加选项CLIENT_MULTI_STATEMENTS CLIENT_MULTI_RESULTS,以即可以让query执行多个语句。 this

mysql_real_connect(mySQL,serverIP,user,password,database,serverPort,NULL,CLIENT_MULTI_STATEMENTS) spa

     query时可能产生错误error2014 Commands out of sync; you can't run this command now .net

 

Mysql文档中说明错误:Commands out of sync code

If you get Commands out of sync; you can't run this command now in your client code, you are calling client functions in the wrong order. server

This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result(). It can also happen if you try to execute two queries that return data without calling mysql_use_result() or mysql_store_result() in between. htm

 

当执行完query后,mysql将结果集放在一个result集中,产生以上问题的缘由有两个:

一是未将MYSQL_RES所指对象释放,即在下次查询时要mysql_free_result();

二是结果result集不为空,这个缘由比较隐蔽。解决方法能够用以下写法:

do

{

  /* Process all results */

  printf("total affected rows: %lld", mysql_affected_rows(mysql));

  ...

  if (!(result= mysql_store_result(mysql)))

  {

     printf(stderr, "Got fatal error processing query/n");

     exit(1);

  }

  process_result_set(result); /* client function */

  mysql_free_result(result);

} while (!mysql_next_result(mysql));

还有个问题感受比较奇怪,我调用一个存储过程,存储过程当中就一句select

Create procedure test()

Begin

    Select * from test ;

End ;

用以上方法处理结果集循环会执行两次,开始我只调了一次result= mysql_store_result(mysql)),致使之后执行query2014错误。

相关文章
相关标签/搜索