【问题标题】:MySQL C++ Connector getting a string with SELECT queryMySQL C++ 连接器使用 SELECT 查询获取字符串
【发布时间】:2013-08-27 16:40:26
【问题描述】:

我是 C++ 上的 mysql 新手,之前在 PAWN 上做过,效果很好,但现在我遇到了问题。我正在尝试从 mysql 数据库中获取密码,稍后将执行其余代码并且我得到一个十六进制代码?如果这是对的?这是我得到的一个例子:0x59fcb0。当我重新启动程序/重新编译它时,它总是会发生变化。我试图用谷歌搜索我的问题,但没有得到任何接近。所以我唯一想做的就是获取一个字段的值并将其存储为一个变量......这是我的代码:

#include <stdlib.h>
#include <stdio.h>
#include <stdio.h>
#include <iostream>
#include <string>

#include <windows.h>
#include <mysql/mysql.h>

using namespace std;

static char *opt_host_name = "host"; /* HOST */
static char *opt_user_name = "user"; /* USERNAME */
static char *opt_password = "pass"; /* PASSWORD */
static unsigned int opt_port_num = 3306; /* PORT */
static char *opt_socket_name = NULL; /* SOCKET NAME, DO NOT CHANGE */
static char *opt_db_name = "database name"; /* DATABASE NAME */
static unsigned int opt_flags = 0; /* CONNECTION FLAGS, DO NOT CHANGE */

int main ()
{
    MYSQL *conn; /* pointer to connection handler */
    MYSQL_RES *res; /* holds the result set */
    MYSQL_ROW row;

    /* INITIALIZE CONNECTION HANDLER, DO NOT CHANGE */
    conn = mysql_init (NULL);

    /* THIS CONNECTS TO SERVER, DO NOT CHANGE ANYTHING HERE */
    mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password,
    opt_db_name, opt_port_num, opt_socket_name, opt_flags);
    /* show tables in the database (test for errors also) */
    mysql_query(conn, "SELECT Password FROM Users WHERE Name = 'MY_NICKNAME'");
    res = mysql_store_result(conn);
    cout << "Password is: \n";
    cout << res << endl;

    /* disconnect from server */
    mysql_close (conn);

    system("pause");
    return 0;
} 
/* end main function */

另外,我更改了 mysql 数据库连接选项。

【问题讨论】:

  • 看起来您使用的是 MySQL C API,而不是 C++ 连接器。
  • 您需要调用mysql_fetch_XXX 函数之一来从结果中获取行。

标签: c++ mysql database string hex


【解决方案1】:

您需要从res 获取实际字段。这是一个简单的示例,您可以轻松展开:

#include <stdlib.h>
#include <stdio.h>
#include <stdio.h>
#include <iostream>
#include <string>

#include <windows.h>
#include <mysql/mysql.h>

using namespace std;

static char *opt_host_name = "host"; /* HOST */
static char *opt_user_name = "user"; /* USERNAME */
static char *opt_password = "pass"; /* PASSWORD */
static unsigned int opt_port_num = 3306; /* PORT */
static char *opt_socket_name = NULL; /* SOCKET NAME, DO NOT CHANGE */
static char *opt_db_name = "database name"; /* DATABASE NAME */
static unsigned int opt_flags = 0; /* CONNECTION FLAGS, DO NOT CHANGE */

int main ()
{
    MYSQL *conn; /* pointer to connection handler */
    MYSQL_RES *res; /* holds the result set */
    MYSQL_ROW row;



    /* INITIALIZE CONNECTION HANDLER, DO NOT CHANGE */
    conn = mysql_init (NULL);

    /* THIS CONNECTS TO SERVER, DO NOT CHANGE ANYTHING HERE */
    mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password,
    opt_db_name, opt_port_num, opt_socket_name, opt_flags);
    /* show tables in the database (test for errors also) */
    mysql_query(conn, "SELECT Password FROM Users WHERE Name = 'MY_NICKNAME'");
    res = mysql_store_result(conn);


    // get the number of the columns
    int num_fields = mysql_num_fields(res);
    // Fetch all rows from the result
    while ((row = mysql_fetch_row(res)))
    {
       // Print all columns
       for(int i = 0; i < num_fields; i++)
       {
           // Make sure row[i] is valid!
           if(row[i] != NULL)
                cout << row[i] << endl;
           else
                cout << "NULL" << endl;

           // Also, you can use ternary operator here instead of if-else
           // cout << row[i] ? row[i] : "NULL" << endl;
       }
    }

    // DON'T FORGET TO CLEAN RESULT AFTER YOU DON'T NEED IT 
    // ANYMORE

    if(res != NULL)
       mysql_free_result(res);

    /* disconnect from server */
    mysql_close (conn);

    system("pause");
    return 0;
} 
/* end main function */

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 2011-06-22
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多