1 #include <iostream>
2 #include <mysql.h>
3 #include <string>
4
5 #include <assert.h>
6
7
8
9 int main()
10 {
11 MYSQL *ms_conn = mysql_init(NULL);
12 if (ms_conn == NULL)
13 {
14 std::cout << "Error: mysql_init failed." << std::endl;
15 return 0;
16 }
17 std::cout << "Info: mysql_init success." << std::endl;
18
19 // 参数CLIENT_MULTI_STATEMENTS 指定一次query 可以执行多条SQL
20 MYSQL *ms_temp = NULL;
21 ms_temp = mysql_real_connect(ms_conn, "localhost", "root", "123456sx",
22 "suyh", 0, NULL, CLIENT_MULTI_STATEMENTS);
23 if (ms_temp == NULL)
24 {
25 std::cout << "Error: mysql_real_connect() failed." << std::endl;
26 std::cout << mysql_error(ms_conn) << std::endl;
27 mysql_close(ms_conn), ms_conn = NULL;
28 return 0;
29 }
30 std::cout << "Info: mysql_real_connect() succect." << std::endl;
31
32 std::string str_sqls = "";
33 str_sqls += "SELECT id, account, sex, level, powers FROM player_data WHERE id = 100000";
34 str_sqls += ";";
35 str_sqls += "SELECT id, account, sex, level, powers FROM player_data WHERE id = 100001";
36 str_sqls += ";";
37 str_sqls += "SELECT id, account, sex, level, powers FROM player_data WHERE id = 100002";
38
39 int res = 0;
40 res = mysql_real_query(ms_conn, str_sqls.c_str(), str_sqls.size());
41 if (res != 0)
42 {
43 std::cout << "Info: query failed, sql: " << str_sqls.c_str() << std::endl;
44 std::cout << mysql_error(ms_conn) << std::endl;
45 }
46 else
47 {
48 std::cout << "Info: query success." << std::endl;
49 std::cout << std::endl;
50
51 // CLIENT_MULTI_STATEMENTS 指定该选项需要mysql_next_result() 函数来获取下一条结果集
52 // 如果结果集未取完,则不能进行query 操作。
53 do
54 {
55 MYSQL_RES *ms_res = mysql_store_result(ms_conn);
56 assert(ms_res != NULL);
57
58 unsigned int field_num = mysql_num_fields(ms_res);
59 std::cout << "fileds number is " << field_num << std::endl;
60
61 MYSQL_FIELD* field_info = mysql_fetch_field(ms_res);
62 assert(field_info != NULL);
63
64 MYSQL_ROW row_data = NULL;
65 while (1)
66 {
67 row_data = mysql_fetch_row(ms_res);
68 if (row_data == NULL)
69 break;
70
71 unsigned long *field_lens = mysql_fetch_lengths(ms_res);
72 assert(field_lens != NULL);
73 for (int i = 0; i < field_num; ++i)
74 {
75 if (field_info[i].type == MYSQL_TYPE_BLOB)
76 {
77 std::cout << "current filed type is BLOB." << std::endl;
78 continue;
79 }
80
81 if (row_data[i] == NULL)
82 {
83 std::cout << "field_lens[" << i << "] = " << field_lens[i]
84 << ", value is NULL." << std::endl;
85 }
86 else
87 {
88 std::cout << "field_lens[" << i << "] = " << field_lens[i]
89 << ", value is " << row_data[i] << std::endl;
90 }
91 }
92 }
93
94 mysql_free_result(ms_res), ms_res = NULL;
95
96 std::cout << "#######################################" << std::endl;
97 } while (mysql_next_result(ms_conn) == 0);
98 }
99
100
101
102 mysql_close(ms_conn), ms_conn = NULL;
103 return 0;
104 }