您的位置:首页 > 其它

解决error:2014 Commands out of sync; you can't run this command now

2012-08-16 11:41 555 查看
前两天搞mysql的东西,用mysql提供的C API 访问,遇到些问题,在这里分享一下,希望对其他人有帮助。

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

在建立链接的时候要加选项CLIENT_MULTI_STATEMENTS
或 CLIENT_MULTI_RESULTS,以便可以让query执行多个语句。

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

当query时可能产生错误error:2014
Commands out of sync; you can't run this command now


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

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.

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.

当执行完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)),导致以后执行query报2014错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐