1 #include <iostream>
2 #include <string>
3
4 #include <string.h>
5 #include <assert.h>
6
7 #include <mysql.h>
8
9 static void do_stmt_sql(MYSQL *ms_conn);
10
11 int main()
12 {
13 // 初始化MYSQL 实例
14 MYSQL *ms_conn = mysql_init(NULL);
15 if (ms_conn == NULL)
16 {
17 std::cout << "mysql init failed." << std::endl;
18 return 0;
19 }
20 std::cout << "mysql init successful." << std::endl;
21
22 // 连接到MYSQL 服务器
23 MYSQL *ms_ret = mysql_real_connect(ms_conn, "localhost", "suyh",
24 "suyunhong", "suyh_db", 0, NULL, 0);
25 if (ms_ret == NULL)
26 {
27 std::cout << "mysql connect failed. "
28 << mysql_error(ms_conn) << std::endl;
29 mysql_close(ms_conn), ms_conn = NULL;
30 return 0;
31 }
32 std::cout << "mysql connect successful." << std::endl;
33
34 do_stmt_sql(ms_conn);
35
36 // 释放资源
37 mysql_close(ms_conn), ms_conn = NULL;
38 return 0;
39 }
40
41 static void do_stmt_sql(MYSQL *ms_conn)
42 {
43 assert(ms_conn != NULL);
44 if (ms_conn == NULL)
45 return ;
46
47 MYSQL_STMT *stmt = NULL;
48 stmt = mysql_stmt_init(ms_conn);
49 if (stmt == NULL)
50 {
51 std::cout << "stmt is NULL. mysql_stmt_init failed. "
52 << mysql_error(ms_conn) << std::endl;
53 return ;
54 }
55 std::cout << "MYSQL_STMT init successful." << std::endl;
56
57 const char str_sql[] = "INSERT INTO tb_bin_data(bin_data) VALUES(?)";
58
59 int res = 0;
60 res = mysql_stmt_prepare(stmt, str_sql, sizeof(str_sql) - 1);
61 if (res != 0)
62 {
63 std::cout << "mysql_stmt_prepare INSERT failed."
64 << mysql_stmt_error(stmt) << std::endl;
65 return ;
66 }
67
68 // 待存到MYSQL 的二进制数据
69 char bin_data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
70
71 MYSQL_BIND bind[1];
72 memset(bind, 0, sizeof(bind));
73 bind[0].buffer_type = MYSQL_TYPE_BLOB;
74 bind[0].is_null = NULL;
75 bind[0].buffer = bin_data;
76 bind[0].buffer_length = sizeof(bin_data);
77
78 res = mysql_stmt_bind_param(stmt, bind);
79 if (res != 0)
80 {
81 std::cout << "mysql_stmt_bind_param failed. "
82 << mysql_stmt_error(stmt) << std::endl;
83 mysql_stmt_close(stmt), stmt = NULL;
84 return ;
85 }
86 std::cout << "mysql_stmt_bind_param successful." << std::endl;
87
88 // res = mysql_stmt_send_long_data(stmt, 0, escape_bin, strlen(escape_bin));
89 // std::cout << "mysql_stmt_send_long_data result is " << res << std::endl;
90
91 res = mysql_stmt_execute(stmt);
92 std::cout << "mysql_stmt_execute() func result is " << res << std::endl;
93
94 mysql_stmt_close(stmt), stmt = NULL;
95 }