php自己做网站访问量计算,windows系统的vps网站防攻击,wordpress系统设置,怎么做可以访问网站连接加密在数据库应用中#xff0c;很多SQL语句都会重复执行很多次#xff0c;每次执行可能只是where条件中的变量值不同#xff0c;但MySQL依然会解析SQL语法并生成执行计划。对于这类情况#xff0c;可以利用prepared语句来避免重复解析SQL的开销。 文章目录 一、prepared语句优…在数据库应用中很多SQL语句都会重复执行很多次每次执行可能只是where条件中的变量值不同但MySQL依然会解析SQL语法并生成执行计划。对于这类情况可以利用prepared语句来避免重复解析SQL的开销。 文章目录 一、prepared语句优点二、prepare语句用法2.1 prepare语句2.2 execute语句2.3 deallocate prepare语句 一、prepared语句优点
prepared语句通过准备一个SQL执行对象然后通过execute语句来重复进行执行在每次执行的过程中提供变量的实际值。相比于重复执行SQL语句prepared statement具有如下优势
在execute语句重复执行的过程中每次只有传入的变量值不同SQL的执行计划不会改变避免重复解析SQL。避免SQL注入攻击。
二、prepare语句用法
prepare statement主要有3个组成部分
prepare语句生成一个prepared statement对象并为其指定别名可使用占位符?指定变量。execute语句通过别名执行一个prepared statement可通过using子句为变量提供值。deallocate prepared语句通过别名释放一个prepared statement。
Prepare语句的生效范围是会话MySQL使用参数max_prepared_stmt_count来控制语句的最大数量如果将该参数设置为0将会禁用prepared statement功能。
show variables like max_prepared_stmt_count;执行如下SQL准备示例数据
create table person(
id int auto_increment primary key,
name varchar(32));
insert into person values (null, Vincent), (null, Victor), (null, Grace);
select * from person;2.1 prepare语句
prepare语句根据文本生成一个SQL语句对象并为其指定一个别名在准备过程中可以使用占位符来替代变量
set sql select name from person where id?;
prepare stmt from sql;示例中通过变量名来传入SQL文本也可以直接通过SQL文本prepare例如prepare stmt from ‘select name from person where id?’;
prepare语句还有一个较常用的场景为动态SQL拼接。即根据用户选择的条件来快速调整过滤条件拼接出不同的SQL
set base select * from person where 11;
set id_filter and id?;
set name_filter and name?;
set sql2 concat(base, id_filter, name_filter); -- 选择了条件就加入拼接
prepare stmt2 from sql2;2.2 execute语句
执行完prepare语句后即可用execute语句来执行如果有?代替的变量则需要通过using语句为其指定值数量要和prepare语句中?数量相同。execute语句在每次执行提供不同的变量即可实现一次解析多次执行
set var1 1;
execute stmt using var1;
set var2 2;
execute stmt using var2;注意using子句中只能通过变量来提供值如果通过常量提供值则会报错
execute stmt using 1;2.3 deallocate prepare语句
prepare语句使用完成后可以使用deallocate/drop prepare ….语句手动进行释放另外当会话断开时所有未释放的prepare语句也会自动释放因此重连或者异常中断都会导致prepare statement丢失。
deallocate prepare stmt;