c 中关闭mysql,关闭C中的连接后,从函数中的MySQL查询返回结果

在C语言中尝试连接MySQL数据库并执行查询时遇到问题。当在关闭连接和释放结果之前返回查询结果时,返回值正确,但未关闭连接导致过多连接错误。问题在于将结果的指针地址误转换为整数。正确做法是使用atoi()函数将字符串转换为整数。修复后的代码确保了资源的适当释放,并避免了数据丢失和连接错误。
摘要由CSDN通过智能技术生成

我在C中有这种奇怪的行为,我不理解.因为我对C相当陌生,所以可能是我.我试图实现的目标是编写一个运行MySQL查询并返回结果的函数.奇怪的是,在下面的代码中,如果我关闭连接并释放结果(正如我期望的顺序那样),似乎我存储在“ retvalue”中的值不再存在.当我在释放结果和关闭连接之前放置return时,返回值,但是显然连接没有关闭,MySQL最终将显示错误“连接太多”.

int CheckBox(char *mac)

{

MYSQL *conn;

MYSQL_RES *res;

MYSQL_ROW row;

/* database details */

char *server = "localhost";

char *user = "user";

char *password = "pw";

char *database = "db";

int retvalue;

conn = mysql_init(NULL);

/* connect to database */

if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0))

{

fprintf(stderr, "%s\n", mysql_error(conn));

exit(1);

}

/* create and send SQL query */

char query[1600];

sprintf(query,"SELECT * FROM boxes WHERE mac = '%s'", mac);

if (mysql_query(conn, query))

{

fprintf(stderr, "%s\n", mysql_error(conn));

exit(1);

}

res = mysql_use_result(conn);

/* check result to see if we have a hit */

if ((row = mysql_fetch_row(res)) != NULL)

{

printf("mac (%s) did exist with id %s.\n",mac,(char *)row[0]);

retvalue = (int)row[0];

} else

{

printf("mac (%s) did NOT exist ",mac);

/* mac address did not yet exist, so create it */

sprintf(query,"INSERT INTO boxes (mac) VALUES ('%s')",mac);

if (mysql_query(conn, query))

{

fprintf(stderr, "%s\n", mysql_error(conn));

exit(1);

} else

{

printf("but now does\n");

CheckBox(mac);

}

}

/* close connection */

mysql_free_result(res);

mysql_close(conn);

/* return id number of box */

return retvalue;

}

所以问题是:

我是否应该假设首先释放结果并关闭连接是正确的顺序?

当我运行这样的函数时,为什么我分配给retvalue的值消失了?

感谢您对初学者很好:-)

解决方法:

强制转换的retvalue =(int)row [0]是错误的.它将结果的地址(转换为int)放入retvalue中. row [0]是一个char *,因此您应该使用retvalue = atoi(row [0]).

标签:c-3,mysql

来源: https://codeday.me/bug/20191101/1983019.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值