mysql 预处理的基本使用

从mysql 4.1开始,就支持预处理语句,这大大提高了客户端和服务器端数据传输的效率。当创建一个预定义sql时,客户端向服务器发送一个sql语句的原型;服务器端接收到这个sql语句后,解析并存储这个sql语句的部分执行计划,返回给客户端一个sql语句处理句柄,以后每次执行这条sql,客户端都指定使用这个句柄。

平时使用的sql是即时sql:一次编译、一次运行;
预处理sql:一次编译、多次运行

预处理的优势:高效执行重复sql、减少网络开销、更加安全

mysql支持sql接口的预处理,即不使用二进制传输协议也可以直接以sql的方式使用预处理。预处理的语法如下。
可以使用dos窗口进行预处理

#定义预处理语句
prepare stmt_name from preparable_stmt;
#执行预处理语句
execte stmt_name [using @var_name [,@var_name]...];
#删除预处理
{deallocate|drop} prepare stmt_name;

实例

prepare sql_employee from 'select * from employee where name=?';
set @name1 = '张三';
set @name1 = '李四';
set @name1 = '王五';
execute sql_employee using @name1;
execute sql_employee using @name2;
execute sql_employee using @name3;
#释放预处理
drop prepare sql_employee;  #会话关闭预处理也会自动释放
### 什么是MySQL预处理 MySQL预处理是一种通过客户端发送SQL语句到服务器端并由服务器执行的过程,在此过程中,SQL语句被解析一次,并可多次执行。这种方式能够显著提高性能和安全性。 #### 预处理的作用 1. **提升效率** 使用预处理语句时,SQL查询仅需解析一次,之后可以通过绑定不同的参数重复执行该查询。这减少了每次执行新查询所需的开销[^1]。 2. **增强安全性** 预处理语句自动转义输入数据中的特殊字符,从而有效防止SQL注入攻击。这是因为在传递参数之前,SQL语法已经被解析完成[^4]。 3. **简化复杂操作** 对于涉及大量动态数据的操作,预处理语句允许开发者更方便地管理这些变化的数据而无需频繁重构整个SQL字符串[^5]。 #### 预处理的用法 以下是使用C API实现的一个简单例子展示如何创建、准备以及执行一条带有占位符的INSERT语句: ```c MYSQL_STMT *stmt; const char *query = "INSERT INTO test_table (column_name) VALUES (?)"; my_bool param_on_off; // 创建一个新的预处理语句对象 if (!(stmt = mysql_stmt_init(&mysql))) { fprintf(stderr, " mysql_stmt_init(), failed\n"); } // 准备SQL语句 if (mysql_stmt_prepare(stmt, query, strlen(query)) != 0){ fprintf(stderr, " mysql_stmt_prepare(), failed\n"); } param_on_off = true; // 假设我们要插入布尔值true // 绑定参数至预处理语句 if (mysql_stmt_bind_param(stmt, &bind) != 0){ fprintf(stderr, " mysql_stmt_bind_param(), failed\n"); } // 执行预处理语句 if(mysql_stmt_execute(stmt)){ fprintf(stderr, " mysql_stmt_execute(), failed\n"); } ``` 上述代码片段展示了基本流程:初始化预处理语句、准备SQL模板、绑定实际参数最后执行命令。 另外需要注意的是,如果希望立即获取结果集中行数,则应先调用`mysql_stmt_store_result()`函数存储所有结果再调用`mysql_stmt_num_rows()`;否则后者可能返回不确定的结果
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值