为什么mysql API查询mysql_real_query后,调用mysql_free_result再调用 mysql_store_result会错误呢?
C代码:#include<mysql/mysql.h>#include<stdio.h>#include<string.h>#include<stdlib.h>intma...
C 代码:
#include<mysql/mysql.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
MYSQL mysql;
//mysql init
mysql_init(&mysql);
//connect to mysql server
#define MYSQL_IP "127.0.0.1"
#define MYSQL_USER "mysql"
#define MYSQL_PWD "mysql"
#define MYSQL_DB "test"
#undef MYSQL_PORT
#define MYSQL_PORT 0
int nReturn=0;
if(NULL!=mysql_real_connect(&mysql,MYSQL_IP,MYSQL_USER, MYSQL_PWD,MYSQL_DB,MYSQL_PORT,NULL,0)){
//query
char sql_string[1025]={0};
snprintf(sql_string,1024,"select user_id from users where user_id=1 ");
nReturn=mysql_real_query(&mysql, sql_string, strlen(sql_string));
MYSQL_RES *res = NULL;
MYSQL_ROW row=NULL;
res=mysql_store_result(&mysql);
int select_rows=mysql_num_rows(res);
if(select_rows==0)
{
nReturn=500;
}else{
nReturn=0;
}
row=mysql_fetch_row(res);
if(row!=0){
printf("get row=%d\n",atoi(row[0]));
}else{
perror("not get row");
}
mysql_free_result(res);
//为什么mysql c API 查询query后,调用mysql_free_result 再调用 mysql_store_result 会错误呢res=NULL??
res=mysql_store_result(&mysql);
if(res==NULL){
printf("mysql_error=%s mysql_errno=%d \n",mysql_error(&mysql),mysql_errno(&mysql));
exit(0);
}
mysql_data_seek(res,0);
select_rows=mysql_num_rows(res);
if(select_rows==0)
{
nReturn=500;
}else{
nReturn=0;
}
row=mysql_fetch_row(res);
if(row!=0){
printf("get row=%d\n",atoi(row[0]));
}else{
perror("not get row");
}
mysql_free_result(res);
}else{
fprintf(stderr, "Failed to connect to database: Error: %s\n",mysql_error(&mysql));
}
//关闭mysql
mysql_close(&mysql);
return 0;
} 展开
#include<mysql/mysql.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
MYSQL mysql;
//mysql init
mysql_init(&mysql);
//connect to mysql server
#define MYSQL_IP "127.0.0.1"
#define MYSQL_USER "mysql"
#define MYSQL_PWD "mysql"
#define MYSQL_DB "test"
#undef MYSQL_PORT
#define MYSQL_PORT 0
int nReturn=0;
if(NULL!=mysql_real_connect(&mysql,MYSQL_IP,MYSQL_USER, MYSQL_PWD,MYSQL_DB,MYSQL_PORT,NULL,0)){
//query
char sql_string[1025]={0};
snprintf(sql_string,1024,"select user_id from users where user_id=1 ");
nReturn=mysql_real_query(&mysql, sql_string, strlen(sql_string));
MYSQL_RES *res = NULL;
MYSQL_ROW row=NULL;
res=mysql_store_result(&mysql);
int select_rows=mysql_num_rows(res);
if(select_rows==0)
{
nReturn=500;
}else{
nReturn=0;
}
row=mysql_fetch_row(res);
if(row!=0){
printf("get row=%d\n",atoi(row[0]));
}else{
perror("not get row");
}
mysql_free_result(res);
//为什么mysql c API 查询query后,调用mysql_free_result 再调用 mysql_store_result 会错误呢res=NULL??
res=mysql_store_result(&mysql);
if(res==NULL){
printf("mysql_error=%s mysql_errno=%d \n",mysql_error(&mysql),mysql_errno(&mysql));
exit(0);
}
mysql_data_seek(res,0);
select_rows=mysql_num_rows(res);
if(select_rows==0)
{
nReturn=500;
}else{
nReturn=0;
}
row=mysql_fetch_row(res);
if(row!=0){
printf("get row=%d\n",atoi(row[0]));
}else{
perror("not get row");
}
mysql_free_result(res);
}else{
fprintf(stderr, "Failed to connect to database: Error: %s\n",mysql_error(&mysql));
}
//关闭mysql
mysql_close(&mysql);
return 0;
} 展开
展开全部
mysql_real_query查询后返回的结果如果正确,你必须用mysql_use_result或mysql_store_result来接收,调用完内容后用mysql_free_result来释放结果集,就是清零内存,实际上这几个都是指针,你给指针赋值就是将指针知道保存内容的内存首地址,如果你执行了mysql_free_result,实际上就是把mysql_store_result保存结果的那块内存给释放掉,你再store等于把指针指向被释放的内存,肯定返回NULL;
你如果是用mysql_store_result,查询结果已经保存到你的内存了,只要你不free,那么随时可以去调用的,只是记得用mysql_data_seek去把指针指到你想要的位置就行,等所有操作完成后再free就可以了。
你如果是用mysql_store_result,查询结果已经保存到你的内存了,只要你不free,那么随时可以去调用的,只是记得用mysql_data_seek去把指针指到你想要的位置就行,等所有操作完成后再free就可以了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询