C语言使用mysql执行两次mysql_query()报错

参考博客:https://bbs.csdn.net/topics/392144169?list=lz

参考博客:https://www.cnblogs.com/rupeng/archive/2012/10/06/2712841.html

 

两个mysql_query()之间需要释放result资源,否则会出现第一次执行成功,第二次执行失败的情况,执行成功返回0,执行失败放回1。

最简单的样例:

//conn_ptr声明:MYSQL *conn_ptr,此前需进行连接数据库操作
char query[50]="select * from stat_info;";
int res = mysql_query(conn_ptr, query);
printf("%d\n", res);

MYSQL_RES *result = mysql_store_result(conn_ptr);
mysql_free_result(result);

char query1[50]="select * from stat_info;";
res = mysql_query(conn_ptr, query);
printf("%d\n", res);

//两次输出都是0,说明两次执行都成功

 

一个完整样例:

//conn_ptr声明:MYSQL *conn_ptr,此前需进行连接数据库操作

/**********************一次查询过程开始**********************/
char query[50]="select * from stat_info;";
//进行查询
int res = mysql_query(conn_ptr, query);
printf("%d\n", res);    //成功则输出0

//获取结果,并输出
MYSQL_RES *result = mysql_store_result(conn_ptr);
//获得结果列数
int col_num = mysql_field_count(conn_ptr);
//输出列名
MYSQL_FIELD *field = mysql_fetch_fields(result);
for (int i = 0; i < col_num; ++i)
    printf("%-10s", field[i].name);
printf("\n");
//输出数据
if(mysql_num_rows(result))
{
    MYSQL_ROW row = NULL;
    while((row=mysql_fetch_row(result)))
    {
       for (int i = 0; i < col_num; ++i)
           printf("%-10s", row[i]);
       printf("\n");
    }
}
//释放资源
mysql_free_result(result);
/**********************一次查询过程结束**********************/

可以再次进行其他数据库操作


//最后,释放连接,关闭数据库
mysql_close(&mysql);

 

你可能感兴趣的:(学习)