gpt4 book ai didi

mysql - 在 C 中关闭连接后返回函数中 MySQL 查询的结果

转载 作者:可可西里 更新时间:2023-11-01 08:07:05 25 4
gpt4 key购买 nike

我在 C 中有这种我不理解的奇怪行为。可能是我,因为我对 C 还很陌生。我想要实现的是编写一个运行 MySQL 查询并返回结果的函数。奇怪的是,在下面的代码中,如果我关闭连接并释放结果(正如我期望的那样),我存储在“retvalue”中的值似乎不再存在。当我在释放结果和关闭连接之前放置返回时,返回值,但显然连接没有关闭,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])

关于mysql - 在 C 中关闭连接后返回函数中 MySQL 查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10488057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com