【问题标题】:Retrieving MySQL *con value in C API在 C API 中检索 MySQL *con 值
【发布时间】:2015-10-05 23:00:40
【问题描述】:

我正在尝试从 mySQL 数据库中检索数据。我写了一个函数来做到这一点。但是当线程返回到 main() 时,con 中的值全为 NULL。我不知道为什么。我使用 Xcode 来调试它。

其实,昨天还好好的。我只是想改变我的程序的路径,然后它失败了。即使我把它改回来,它仍然不能再工作了。而且我写了一个小程序来测试连接,也是同样的问题。

下面是我试过的小程序。他们有同样的问题。

#include "fun.h"

int main(void) {

MYSQL* con;
int num;
int* p_num=#

change_num(p_num);
printf("[%d]Hello, World!\n",num);

// After the execution, con is still NULL.
MYSQLInit(con);
if (con==NULL) {
    finish_with_error(con);
}

return 0;
}

函数文件:

#include "fun.h"

void MYSQLInit(MYSQL* con){

con=mysql_init(NULL);
if (con == NULL)
    finish_with_error(con);

/* mySQL login */
if (mysql_real_connect(con, "85.235.3.37", "July", "0000",
                       NULL , 0, NULL, 0) == NULL)
{
    finish_with_error(con);
}

if (mysql_query(con, "USE lamp")) {
    finish_with_error(con);
}
// con has correct value here
}

void finish_with_error(MYSQL *con)
{
fprintf(stderr, "%s\n", mysql_error(con));
mysql_close(con);
exit(1);
}

void change_num(int* p_num){
*p_num=10;
}

【问题讨论】:

  • 那么在函数文件中,在MYSQLInit()中,你调用mysql_init()之后,con不是NULL
  • 是的,完全正确。然后我添加了mysql_store_result( )mysql_fetch_row( ) 从mysql 数据中读取数据。它工作正常。只有当它返回到 main 时,它才会再次为空。
  • mysql_error(con) 告诉你什么?
  • @moffeltje 它是空的。除了\n,它根本不打印任何消息。这意味着它不是错误,只是con 是空的。

标签: mysql c


【解决方案1】:

您需要再取消引用一个级别:

void MYSQLInit(MYSQL **con)
{
    *con = mysql_init(NULL);
    // ...
}

然后,调用:

MYSQLInit(&con);

或者,您可以从您的函数中返回 MYSQL *,例如:

MYSQL *MYSQLInit()
{
    MYSQL *con = mysql_init(NULL);
    // ...
    return con;
}

然后这样调用:

con = MYSQLInit();

【讨论】:

  • 不,仍然。就算我退货。在 main() 中为 NULL。
  • @ButterLover 如果con 在你return 它之前不是NULL,我认为它不可能在调用者处神奇地变为NULL。
  • 我完全同意你的看法。现在我试图找出为什么它神奇地变成了NULL。因此,我收到 EXC_BAD_ACCESS 错误。正如我所提到的,它运行良好近一个月。我真的不知道为什么它现在没有。但是,还是非常感谢你。
猜你喜欢
  • 2022-06-15
  • 2012-01-05
  • 2014-11-10
  • 2013-12-02
  • 1970-01-01
  • 2013-06-28
  • 2017-01-11
  • 2011-02-17
  • 2016-07-29
相关资源
最近更新 更多