• MYSQL C API : struct MYSQL_STMT 结构的组合使用


     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 }
  • 相关阅读:
    学到了林海峰,武沛齐讲的Day20 装饰器
    学到了林海峰,武沛齐讲的Day19 迭代细讲
    学到了林海峰,武沛齐讲的Day18 迭代
    学到了林海峰,武沛齐讲的Day18-4 文件操作
    hdu1106 java字符串分割
    hdu1282 回文数猜想
    hud1047 java大数忽略空格
    hdu1018 阶乘位数的数学原理
    hdu1715 java解大菲波数
    hdu1316 java解高精度斐波数
  • 原文地址:https://www.cnblogs.com/suyunhong/p/4807564.html
Copyright © 2020-2023  润新知