1

我在不同的函数中使用函数 mysql_store_result() 和 mysql_fetch_row() 时遇到问题。

如果我这样做,一切正常:

int main() {
  MYSQL *connection;
  MYSQL_RES *result;
  MYSQL_ROW row;
  //Connect to database

  mysql_query(connection, "SELECT column1 FROM table ORDER BY column1 ASC");
  result = mysql_use_result(connection);
  row = mysql_fetch_row(result);
  puts(row[0]);

  //Free results & close connection
}

但是,当我尝试在两个不同的函数中执行此操作时,我总是在 mysql_fetch_row(result) 上收到错误消息:“mysql_fetch_row() at 0xb781454d”没有可用的源。

我尝试了这两种方法(没有释放结果或关闭数据库()中的连接):

int main() {
  MYSQL_RES *result;
  MYSQL_ROW row;

  database(result);
  row = mysql_fetch_row(result);
  puts(row[0]);

  //free results
}

void database(MYSQL_RES *result) {
  MYSQL *connection;
  //Connect to database

  mysql_query(connection, "SELECT column1 FROM table ORDER BY column1 ASC");
  result = mysql_use_result(connection);
}

int main() {
  MYSQL *connection;
  MYSQL_RES *result;
  MYSQL_ROW row;

  database(connection);
  result = mysql_use_result(connection);
  row = mysql_fetch_row(result);
  puts(row[0]);

  //close connection & free results
}

void database(MYSQL *connection) {
  //Connect to database

  mysql_query(connection, "SELECT column1 FROM table ORDER BY column1 ASC");
}

所以我的问题:

  1. 我究竟做错了什么?
  2. 是否可以在两个不同的函数中进行选择和输出,而无需将所有结果复制到 RAM 中的不同结构中?
  3. 我试图在没有面向对象的程序编程中实现这一点。什么是最好的做法?

感谢您的任何帮助

4

1 回答 1

1

您的第一次尝试失败,因为database传递了一个指向 aMYSQL_RES按值的指针。这意味着它对调用者变量的副本进行操作,并且不会影响调用者变量的状态。如果你想修改调用者的变量,你需要传递一个指向它的指针,即MYSQL_RES**

int main() {
    ....
    database(&result);
    ....
}

void database(MYSQL_RES **result) {
  MYSQL *connection;
  //Connect to database

  mysql_query(connection, "SELECT column1 FROM table ORDER BY column1 ASC");
  *result = mysql_use_result(connection);
}

或者,在这种情况下,如果您更改database为返回 aMYSQL_RES*

int main() {
    ....
    result = database();
    ....
}

MYSQL_RES* database() {
  MYSQL *connection;
  //Connect to database

  mysql_query(connection, "SELECT column1 FROM table ORDER BY column1 ASC");
  return mysql_use_result(connection);
}

您的第二个重构选项因类似原因而失败,但connection成为问题变量。

于 2013-06-17T12:11:54.640 回答