首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C mysql_num_rows()分段错误

问C mysql_num_rows()分段错误
EN

Stack Overflow用户
提问于 2013-05-05 20:24:39
回答 2查看 934关注 0票数 0

我试图用C语言执行MySQL查询,但是在调用mysql_num_rows()时得到了一个分段错误。

下面是我使用的代码:

代码语言:javascript
复制
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()函数:

代码语言:javascript
复制
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;
}

我已经测试了查询,问题不在那里,连接也启动了。有什么想法吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-05 20:29:44

您的问题在这里,在db_query函数中:

代码语言:javascript
复制
if (!(result = mysql_store_result(db_connection)))

对result的赋值在函数的调用者中没有明显的效果-您是通过值传递指针,在被调用者中更改result的值不会对调用者中的result做任何事情。

您需要将函数更改为指针指向指针,并调整调用点和db_query函数。

代码语言:javascript
复制
bool db_query(const char *query, MYSQL_RES **result)
{
  ...
  if (!(*result = mysql_store_result(db_connection)))
  ...
}
票数 3
EN

Stack Overflow用户

发布于 2013-05-05 20:29:59

对db_query函数中的result所做的任何更改都不会反映回调用者,因此它仍将包含创建时的任意值(作为没有初始化的自动变量)。

如果你想改变这个值并把它反射回来,你应该传递一个指向它的双指针,然后解引用这个双指针来得到实际的值。

更好的方法是返回result值,并使用它的NULL/非NULL状态作为成功代码,而不是返回true/false。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16384489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档