MYSQL C API : mysql_real_query()


 

 1 enum enum_field_types { 
 2     MYSQL_TYPE_DECIMAL, 
 3     MYSQL_TYPE_TINY,
 4     MYSQL_TYPE_SHORT,  
 5     MYSQL_TYPE_LONG,
 6     MYSQL_TYPE_FLOAT,  
 7     MYSQL_TYPE_DOUBLE,
 8     MYSQL_TYPE_NULL,   
 9     MYSQL_TYPE_TIMESTAMP,
10     MYSQL_TYPE_LONGLONG,
11     MYSQL_TYPE_INT24,
12     MYSQL_TYPE_DATE,   
13     MYSQL_TYPE_TIME,
14     MYSQL_TYPE_DATETIME, 
15     MYSQL_TYPE_YEAR,
16     MYSQL_TYPE_NEWDATE, 
17     MYSQL_TYPE_VARCHAR,
18     MYSQL_TYPE_BIT,
19     MYSQL_TYPE_TIMESTAMP2,
20     MYSQL_TYPE_DATETIME2,
21     MYSQL_TYPE_TIME2,
22     MYSQL_TYPE_NEWDECIMAL=246,
23     MYSQL_TYPE_ENUM=247,
24     MYSQL_TYPE_SET=248,
25     MYSQL_TYPE_TINY_BLOB=249,
26     MYSQL_TYPE_MEDIUM_BLOB=250,
27     MYSQL_TYPE_LONG_BLOB=251,
28     MYSQL_TYPE_BLOB=252,
29     MYSQL_TYPE_VAR_STRING=253,
30     MYSQL_TYPE_STRING=254,
31     MYSQL_TYPE_GEOMETRY=255
32 }
33 
34 typedef struct st_mysql_field {
35   char *name;                 /* Name of column 列名 */
36   char *org_name;             /* Original column name, if an alias */
37   char *table;                /* Table of column if column was a field */
38   char *org_table;            /* Org table name, if table was an alias */
39   char *db;                   /* Database for table */
40   char *catalog;           /* Catalog for table */
41   char *def;                  /* Default value (set by mysql_list_fields) */
42   unsigned long length;       /* Width of column (create length) */
43   unsigned long max_length;   /* Max width for selected set */
44   unsigned int name_length;
45   unsigned int org_name_length;
46   unsigned int table_length;
47   unsigned int org_table_length;
48   unsigned int db_length;
49   unsigned int catalog_length;
50   unsigned int def_length;
51   unsigned int flags;         /* Div flags */
52   unsigned int decimals;      /* Number of decimals in field */
53   unsigned int charsetnr;     /* Character set */
54   enum enum_field_types type; /* Type of field. See mysql_com.h for types */   // 字段的mysql 數據類型
55   void *extension;
56 } MYSQL_FIELD;
57 
58 
59 int    mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
60     說明:執行SQL
61     參數1:已初始化的MYSQL 實例;
62     參數2:SQL 語句;
63     參數3:SQL 語句字符數。
64 
65 MYSQL_RES *mysql_store_result(MYSQL *mysql);
66     說明:對於成功檢索了數據的每個查詢(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必須調用mysql_store_result()或mysql_use_result()
67     參數:已初始化的MYSQL 實例。
68 
69 // typedef char **MYSQL_ROW; 
70 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
71     說明:檢索一個結果集合的下一行。當在mysql_store_result()之后使用時,如果沒有更多的行可檢索時,mysql_fetch_row()返回NULL。當在mysql_use_result()之后使用時,當沒有更多的行可檢索時或如果出現一個錯誤,mysql_fetch_row()返回NULL。

 

代碼范例:

 1 #include <iostream>
 2 #include <mysql.h>
 3 #include <string>
 4 
 5 #include <assert.h>
 6 
 7 int main()
 8 {
 9     // 1、初始化MYSQL 實例
10     MYSQL *ms_conn = mysql_init(NULL);
11     if (ms_conn == NULL)
12     {
13         std::cout << "Error: mysql_init failed." << std::endl;
14         return 0;
15     }
16     std::cout << "Info: mysql init successful." << std::endl;
17 
18     // 2、連接MYSQL 服務器
19     MYSQL *ms_tmp_res = NULL;
20     ms_tmp_res = mysql_real_connect(ms_conn, "localhost", "root", "123456sx", 
21             "suyh", 0, NULL, 0);
22     if (ms_tmp_res == NULL)
23     {
24         std::cout << "Error: connect mysql failed: " << mysql_error(ms_conn) << std::endl;
25         mysql_close(ms_conn), ms_conn = NULL;
26         return 0;
27     }
28     std::cout << "Info: mysql connect successful." << std::endl;
29 
30     // 3、執行SQL 語句
31     std::string str_sqls = "";
32     str_sqls += "SELECT id, account, sex, level, powers FROM player_data WHERE id = 100000 OR id = 100001 OR id = 100002";
33 
34     int res = 0;
35     res = mysql_real_query(ms_conn, str_sqls.c_str(), str_sqls.size());
36     if (res != 0)
37     {
38         std::cout << "Error: query failed, sql: " << str_sqls.c_str() << std::endl;
39         std::cout << mysql_error(ms_conn) << std::endl;
40     }
41     else
42     {
43         std::cout << "Info: query successful." << std::endl;
44 
45         // 取出SQL 語句執行的結果集
46         MYSQL_RES *ms_res = mysql_store_result(ms_conn);
47         if (ms_res != NULL)
48         {
49             // 字段個數
50             unsigned int field_num = mysql_num_fields(ms_res);
51 
52             // 每個字段的數據信息
53             MYSQL_FIELD* field_info = mysql_fetch_field(ms_res);
54             assert(field_info != NULL);
55 
56             // 每一個字段的值存儲在row_data[i] 中,基本都以字符串的形式存儲。NULL 的結果 指針也是NULL。
57             // 二進制數據可以通過mysql_fetch_lengths() 函數得到該字段的二進制數據長度,同樣以數組形式取出,即:lens[i];
58             MYSQL_ROW row_data = NULL;    // mysql.h    ---    typedef char **MYSQL_ROW;
59             while (1)
60             {
61                 row_data = mysql_fetch_row(ms_res);    // 取出下一行結果
62                 if (row_data == NULL)
63                     break;
64 
65                 std::cout << "##############################################" << std::endl;
66                 for (int i = 0; i < field_num; ++i)
67                 {
68                     if (row_data[i] == NULL)
69                         std::cout << "field name: '" << field_info[i].name << "', values is NULL." << std::endl;
70                     else
71                         std::cout << "field name: '" << field_info[i].name << "', values is " << row_data[i] << std::endl;
72                 }
73             }
74         }
75 
76         // 釋放結果集
77         mysql_free_result(ms_res), ms_res = NULL;
78     }
79 
80     // 使用完釋放系統資源
81     mysql_close(ms_conn), ms_conn = NULL;
82     
83     return 0;
84 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM