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 }