MYSQL C API : mysql_real_escape_string 二进制数据存储

 1 #include <iostream>
 2 #include <string>
 3 
 4 #include <string.h>
 5 
 6 #include <mysql.h>
 7 
 8 int main()
 9 {
10     // 初始化MYSQL 实例
11     MYSQL *ms_conn = mysql_init(NULL);
12     if (ms_conn == NULL)
13     {
14         std::cout << "mysql init failed." << std::endl;
15         return 0;
16     }
17     std::cout << "mysql init successful." << std::endl;
18 
19     // 连接到MYSQL 服务器
20     MYSQL *ms_ret = mysql_real_connect(ms_conn, "localhost", "root", 
21             "123456sx", "temp", 0, NULL, 0);
22     if (ms_ret == NULL)
23     {
24         std::cout << "mysql connect failed." << std::endl;
25         std::cout << mysql_error(ms_conn) << std::endl;
26         mysql_close(ms_conn), ms_conn = NULL;
27         return 0;
28     }
29     std::cout << "mysql connect successful." << std::endl;
30 
31     // 待存到MYSQL 的二进制数据
32     char bin_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
33 
34     // 转义二进制数为一条字符串数据,
35     // 同时mysql_real_escape_string() 生成的字符串会自动添加尾零
36     char *escape_bin = new char[sizeof(bin_data) * 2 + 1];
37     mysql_real_escape_string(ms_conn, 
38             escape_bin, bin_data, sizeof(bin_data));
39 
40     // 生成SQL 语句
41     std::string str_sql = "";
42     str_sql += "INSERT INTO tb_bin_data(bin_data) VALUES('";
43     str_sql += escape_bin;
44     str_sql += "')";
45 
46     delete [] escape_bin, escape_bin = NULL;
47 
48     int res = 0;
49     res = mysql_real_query(ms_conn, str_sql.c_str(), 
50             str_sql.size());
51     if (res != 0)
52     {
53         std::cout << "Error: query failed. " 
54             << mysql_error(ms_conn) << std::endl;
55     }
56     else
57     {
58         std::cout << "Info: query successful." << std::endl;
59     }
60 
61     // 释放资源
62     mysql_close(ms_conn), ms_conn = NULL;
63     return 0;
64 }