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

dro*_*ath 6 c c++ mysql api

尝试使用带有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 < numfields; i++)
        {
            while(mfield = mysql_fetch_field(confres))
            {
                mfield->//??? I'm dead
            }
        }
    }

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

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

谢谢

Avi*_*Avi 15

在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...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这会泄漏内存."完成结果集后,你还必须调用mysql_free_result()." https://dev.mysql.com/doc/refman/5.7/en/mysql-store-result.html另请参阅https://dev.mysql.com/doc/refman/5.7/en/c-api-function -overview.html (3认同)