我在使用函数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(结果)上得到一个错误:没有可用的源代码“mysql_fetch_row()位于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");
}
所以我的问题:
感谢您的帮助
答案 0 :(得分:1)
您的第一次尝试失败,因为database
按值传递指向MYSQL_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
以返回MYSQL_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
是问题变量。