本文主要是介绍2014 Commands out of sync; you can't run this command now,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
错误简介
在使用mysql_query
进行查询操作时,报错如下:
2014 Commands out of sync; you can't run this command now
错误原因
第一次调用mysql_query/mysql_real_query之后,没有进行mysql_store_result操作,导致的此错误。
如下代码可以复现:
#include <mysql/mysql.h>
#include <iostream>
#include <unistd.h>
using namespace std;int main()
{MYSQL* conn;MYSQL_RES* res;MYSQL_ROW row;char* query="select * from ashe where id>3";conn=mysql_init(0);if(!mysql_real_connect(conn,"192.168.30.129","ashe","ashe","ashe",13307,NULL,0)){cout << mysql_errno(conn) << " " << mysql_error(conn) <<endl;return -1;}int i=0;while(i<1000000){cout << i <<endl;if(mysql_query(conn,query)){cout << mysql_errno(conn) << " " << mysql_error(conn) << endl;return -1;}else{
// res=mysql_store_result(conn);
// while(row=mysql_fetch_row(res))
// {
// cout << row[0] <<endl;
// cout << row[1] <<endl;
// }
// mysql_free_result(res);
// mysql_free_result(res);}i++;}}
解决方案
在每一次query之后,都进行一次store操作。
如上所说的方法只能解决如题所示的问题,但是也会造成内存泄漏,因为每一次执行mysql_store_result
都会重新分配新的内存,并没有执行mysql_free_result
进行内存释放。所以需要在执行mysql_store_result
之后,需要进行一次释放操作。
但是,如果执行两次mysql_free_result
,又会引发段错误。
这篇关于2014 Commands out of sync; you can't run this command now的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!