YYY
2025-09-10 cfbe8a37cf219aee24686e61764042c567f98b4e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include "stdafx.h"
#include "MySQLDB.h"
 
 
MySQLDB::MySQLDB()
{
    //Õýʽ¿ªÊ¼¹¹Ôì
    if (init_mysql())
    {
        if (connect_mysql())
        {
            //Á¬½Ó³É¹¦
            cout << "mysql connect success..." << endl;
        }
        else
        {
            //Á¬½Óʧ°Ü
            cout << "mysql connect fail !" << endl;
        }
    }
    else 
    {
        //³õʼ»¯Ê§°Ü
        cout << "mysql init fail !" << endl;
    }
}
 
 
MySQLDB::~MySQLDB()
{
    mysql_close(my_mysql);//¹Ø±Õ
}
 
/* Êý¾Ý¿â²éѯ */
size_t MySQLDB::execSQL(const string & sql, vector<vector<string>>& result)
{
    //¸ù¾Ý×Ö·û´®sql£¬·¢¸øÊý¾Ý¿â
    //µÃµ½½á¹û¼¯
    //½âÎö½á¹û¼¯£¬ÌáÈ¡Êý¾Ýµ½resultÖÐ
    //·µ»ØµÃµ½µÄ½á¹û¼¯µÄÊý¾ÝÐÐÊý
 
    if (mysql_real_query(my_mysql, sql.c_str(),(unsigned long)sql.length())) {
        //·µ»ØÖµÎª·Ç0£¬´ú±íʧ°Ü
        cout << "execSQL fail !" << mysql_error(my_mysql) << endl;
        return -1;
    }
 
    //SQLÓï¾ä·¢Ëͳɹ¦
 
    //È¡µÃ½á¹û¼¯¡¾×¢Ò⣬ÓÃÍêºó£¬ÐèÒªÊÍ·Å¡¿
    MYSQL_RES * res = mysql_store_result(my_mysql);
 
    //Ôٵõ½½á¹û¼¯µÄÁÐÊý£¬·½±ãÈ·¶¨Ò»¸övectorÖеÄstringÐÍÊý¾ÝµÄ¸öÊý
    unsigned int res_colomn_count = mysql_num_fields(res);
 
    //µÃµ½½á¹û¼¯µÄÐÐÊý
    MYSQL_ROW row;
 
    //Ñ­»·¶Á³ö½á¹û¼¯µÄ¸÷¸öÐУ¬ÁеÄÊý¾Ý
    while ( (row = mysql_fetch_row(res)) )
        //ÅжÏÖеÄÕâ¸öÓï¾äµÄЧ¹ûÊÇ×Ô¶¯µÄ£¬ÔÚÿ´ÎÑ­»·ºó£¬ÔÙ´ÎÀ´µ½ÕâÀ·µ»ØµÄ½á¹ûÊDz»Ò»ÑùµÄ
        //ÿһ´Î£¬¶¼»á·µ»Ø ´æ´¢×ÅÕâÒ»ÐеÄËùÓÐÁеÄÊý¾ÝµÄ"Êý¾Ý½áºÏÌå"Ö¸Õ룬¸ñʽ¾ÍÏñ×Ö·û´®Êý×éÒ»Ñù£¨char **£©== MYSQL_ROW
        //Ö±µ½£¬×ßµ½×îºóÒ»Ðкó£¬Ã»ÓÐеÄÐÐʱ£¬·µ»ØNULL£¬while¾Í»á½áÊø
    {
        vector<string> one_line;
        for (unsigned int i = 0;i < res_colomn_count;i++)
        {
            one_line.push_back(row[i]);
        }
        result.push_back(one_line);
    }
 
    //ÊͷŽá¹û¼¯
    mysql_free_result(res);
    
    //·µ»Ø½á¹û¼¯µÄÐÐÊý
    return result.size();
}
 
/* Êý¾Ý¿â²åÈë */
uint64_t MySQLDB::exec_insSQL(const string & sql, char *info)
{
    //¹Ø¼üº¯Êý
    if (mysql_real_query(my_mysql, sql.c_str(), (unsigned long)sql.length())) {
        //·µ»ØÖµÎª·Ç0£¬´ú±íʧ°Ü,¼Ç¼´íÎóÐÅÏ¢
        strcpy_s(info,100, mysql_error(my_mysql));
        cout << "execSQL fail !" << info << endl;
        return 0;
    }
 
    //³É¹¦·µ»ØÕý³£id£¬Ê§°Ü·µ»Ø0
    strcpy_s(info, 100, "");
    return mysql_insert_id(my_mysql);
}
 
/* ³õʼ»¯ */
bool MySQLDB::init_mysql()
{
    my_mysql = mysql_init(nullptr);//Ö¸Õ룺³õʼ»¯,·µ»ØµÄÊÇMYSQLÖ¸ÕëÀàÐÍ
    if (my_mysql != nullptr)
    {
        return true;
    }
    return false;
}
 
/* Á¬½Ó */
bool MySQLDB::connect_mysql()
{
    //Á¬½ÓMYSQL
    MYSQL * conn = mysql_real_connect(
        my_mysql,        //mysql_initµÃµ½µÄ¾ä±ú
        "127.0.0.1",    //µÇ½µÄmysqlµÄIPµØÖ·
        "root",            //µÇ¼ʹÓõÄÓû§Ãû
        "066733",        //µÇ¼ʹÓõÄÓû§ÃÜÂë
        "face_link_ai",    //Êý¾Ý¿âµÄÃû³Æ
        3306,            //¶Ë¿ÚºÅ
        nullptr,        //**ÎÒÃÇʹÓÃĬÈÏ
        0                //**ÎÒÃÇʹÓÃĬÈÏ
    );
    if (conn)
    {
        //Á¬½ÓÉÏÁË
        //ÉèÖÃÊý¾Ý¿â´«Êä¹ýÀ´µÄ×Ö·û±àÂë²ÉÓÃGBK
        
        string sql = "set names gbk";//MYSQLµÄÃüÁÉèÖÃMySQLÁ¬½ÓµÄ×Ö·û¼¯ÎªGBK±àÂë
 
        /*
        ÕâÌõÃüÁî¸æËßMySQL·þÎñÆ÷£º
 
            ¿Í»§¶Ë·¢Ë͵ÄSQLÓï¾äʹÓÃGBK±àÂë
 
            Ï£Íû·þÎñÆ÷·µ»ØµÄ½á¹ûҲʹÓÃGBK±àÂë
 
            ·þÎñÆ÷ºÍ¿Í»§¶ËÖ®¼äµÄͨÐÅʹÓÃGBK±àÂë
        
        */
 
        if (mysql_real_query(my_mysql,sql.c_str(),(unsigned long)sql.length()))
        {
            //³É¹¦·µ»Ø0£¬if¿éÓï¾ä²»Ö´ÐУ¬Ê§°Ü²ÅÖ´ÐÐ
            cout << "set names gbk --- error : " << mysql_error(my_mysql) << endl;
            return false;
        }
        return true;
    }
    return false;
}