C++连接Mysql数据库 & 使用预处理读写BLOB

本文介绍了使用C++通过预处理语句连接MySQL数据库,特别是处理BLOB类型数据的方法。预处理能减少服务器负荷,提高响应速度,并提供了参数化的查询方式。示例代码分别展示了写入和读取二进制数据的步骤,涉及的关键函数有mysql_real_escape_string()和mysql_store_result()等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常C++链接mysql你每次都需要转换数据,传指针,传大小等一系列复杂操作,是不是顺序很混乱,过程很繁杂。mysql也为你提供了另外一种方法,那就是MYSQL_BIND。将数据操作统一化,统一麻烦化。mysqlbind是一个结构体,根据个人不同需求填充各个数据成员可以存储任意类型数据,当然包括blob。

1.预处理语句(推荐)

对于多次执行的语句,预处理执行比直接执行快,主要原因在于,仅对查询执行一次解析操作。在直接执行的情况下,每次执行语句时,均将进行查询。此外,由于每次执行预处理语句时仅需发送参数的数据,从而减少了网络通信量

预处理机制特点:

  • 减少服务器负荷
  • 提高服务器响应的速度
  • 可以提供参数机制,让客户有更多查询方法

预处理机制数据类型

MYSQL_STMT 该结构表示预处理语句
MYSQL_BIND 该结构用于语句输入(发送给服务器的数据值)和输出(从服务器返回的结果值)

函数:

MYSQL_STMT *mysql_stmt_init(MYSQL *mysql)    
    //创建MYSQL_STMT句柄。对于该句柄,应使用mysql_stmt_close(MYSQL_STMT *)释放
int mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, unsigned long length)
    //给定mysql_stmt_init()返回的语句句柄,准备字符串查询指向的SQL语句,并返回状态值。字符串长度应由“length”参量给出
my_bool mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
    //用于为SQL语句中的参数标记符绑定数据
my_bool mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
    //mysql_stmt_bind_result()用于将结果集中的列与数据缓冲和长度缓冲关联(绑定)起来
int mysql_stmt_execute(MYSQL_STMT *stmt)
    //mysql_stmt_execute()执行与语句句柄相关的预处理查询
int mysql_stmt_store_result(MYSQL_STMT *stmt)
    //以便后续的mysql_stmt_fetch()调用能返回缓冲数据
int mysql_stmt_fetch(MYSQL_STMT *stmt)
    //mysql_stmt_fetch()返回结果集中的下一行
my_bool mysql_stmt_close(MYSQL_STMT *)
    //关闭预处理语句

2.预处理机制步骤

MYSQL_STMT * st;
//对处理的数据类型初始化   
MYSQL_STMT *mysql_stmt_init(MYSQL*)    st=mysql_stmt_init(MYSQL*);

//将预处理句柄与具体sql语句绑定 
int mysql_stmt_prepare(MYSQL_STMT * st,char* sql,int length);

mysql_stmt_prepare(st,sql,strlen(str));

//mysql语句的参数
select * from tablename where id=? and name=?
//给参数赋值
MYSQL_BIND  para[n]   
//1.n根据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值