我试图用C语言执行MySQL查询,但是在调用mysql_num_rows()时得到了一个分段错误。
下面是我使用的代码:
char *username = "test@mail.com";
char *password = "pass";
char query[1000];
int len;
char *q = "SELECT * FROM Users WHERE `Email` = '%s' AND `Password` = '%s'";
len = snprintf(query, strlen(q) + strlen(username) + strlen(password), q, username, password);
MYSQL_RES *result;
if (db_query(query, result))
{
if (result != NULL)
{
int test_count = mysql_num_rows(result);
printf("%d\n", test_count);
}
}
else
{
printf("Query error\n");
}下面是db_query()函数:
bool db_query(const char *query, MYSQL_RES *result)
{
if (mysql_query(db_connection, query))
{
printf("mysql_query(): Error %u: %s\n", mysql_errno(db_connection), mysql_error(db_connection));
return false;
}
if (!(result = mysql_store_result(db_connection)))
{
printf("mysql_store_result(): Error %u: %s\n", mysql_errno(db_connection), mysql_error(db_connection));
return false;
}
return true;
}我已经测试了查询,问题不在那里,连接也启动了。有什么想法吗?
谢谢!
发布于 2013-05-05 20:29:44
您的问题在这里,在db_query函数中:
if (!(result = mysql_store_result(db_connection)))对result的赋值在函数的调用者中没有明显的效果-您是通过值传递指针,在被调用者中更改result的值不会对调用者中的result做任何事情。
您需要将函数更改为指针指向指针,并调整调用点和db_query函数。
bool db_query(const char *query, MYSQL_RES **result)
{
...
if (!(*result = mysql_store_result(db_connection)))
...
}发布于 2013-05-05 20:29:59
对db_query函数中的result所做的任何更改都不会反映回调用者,因此它仍将包含创建时的任意值(作为没有初始化的自动变量)。
如果你想改变这个值并把它反射回来,你应该传递一个指向它的双指针,然后解引用这个双指针来得到实际的值。
更好的方法是返回result值,并使用它的NULL/非NULL状态作为成功代码,而不是返回true/false。
https://stackoverflow.com/questions/16384489
复制相似问题