使用MySQL C API和C ++在MySQL数据库表中获取行

尝试使用带有MySQL C API的C ++在mysql中获取表行时,我感到很困惑。

我可以在PHP中轻松完成,因为C ++是一种强类型语言,因此我们还需要处理脏过程。

这是我在PHP中完成的方式

  $ data = array();
 $ i = 0;
 $ query = mysql_query(“SELECT * FROM`my_table`”);
 while($ fetch = mysql_fetch_array($ query))
 {
   $ data [$ i] = $ fetch ['columntobefetched'];
   $ I ++;
 } 

但是如何在C ++中使用MySQL API做同样的事情呢?

这是我到目前为止的代码….带有令人困惑的死胡同…… x__x

  MYSQL * sqlhnd = mysql_init(NULL);
     mysql_real_connect(sqlhnd,“server”,“user”,“pass”,“database”,port,NULL,0);

     mysql_query(sqlhnd,“SELECT * FROM`my_table`”);
     MYSQL_RES * confres = mysql_store_result(sqlhnd);
     int totalrows = mysql_num_rows(confres);
     int numfields = mysql_num_fields(confres);
     MYSQL_FIELD * mfield;

     while((row = mysql_fetch_row(confres)))
     {
         for(i = 0; i  // ??? 我死了
             }
         }
     } 

基本上我想从数据库表中的字段中获取值并将其存储到变量中。

任何forms的帮助将不胜感激:)

谢谢

在MySQL C API中, mysql_fetch_row返回一个MYSQL_ROW对象,该对象本质上是当前行中的值数组。

所以,你的代码应该是这样的:

mysql_query(sqlhnd, "SELECT * FROM `my_table`"); MYSQL_RES *confres = mysql_store_result(sqlhnd); int totalrows = mysql_num_rows(confres); int numfields = mysql_num_fields(confres); MYSQL_FIELD *mfield; while((row = mysql_fetch_row(confres))) { for(i = 0; i < numfields; i++) { char *val = row[i]; // do something with val... } } 

更好的是,不要在程序中执行“SELECT * FROM mytable ”。 命名您期望的字段会更好,这样您就可以确定返回字段的顺序。

如果您使用的是C ++,为什么不使用MySQL ++ ? 这是一些示例代码:

 mysqlpp::Connection dbconnection; dbconnection.connect("database", "server", "user", "pass"); mysqlpp::Query prepared_query = dbconnection.query( "SELECT * FROM `my_table`" ); mysqlpp::StoreQueryResult r = prepared_query.store(); int field = r.field_num("columntobefetched"); for(mysqlpp::StoreQueryResult::iterator i = r.begin(); i!=r.end();i++) { std::cout << i->at(field) << std::endl; std::cout << (*i)["columntobefetched"] << std::endl; // this will be slower }