mysql中,使用存储过程,动态执行sql语句,可以防止sql注入。
一、基本原理

二、优化使用

注意:其中@sqlstr、@sqlargs属于用户变量,当用户退出后消失,
-- sql语句的动态执行,可以防止sql注入, -- 原理--------------------------------------------- delimiter \\ drop procedure if exists proc_sql \\ create procedure proc_sql() begin declare p1 int; set p1=4; set @p=p1; -- 预编译 prepare prod from 'select * from woman where nid>?'; -- 指定参数 execute prod using @p; -- 删除预编译 deallocate prepare prod; end \\ delimiter; call proc_sql(); -- 优化------------------------------------------------ delimiter \\ drop procedure if exists proc_sql \\ create procedure proc_sql( in sql_str varchar(128), in nid int ) begin set @sqlstr=sql_str; set @sqlargs=nid; prepare prod from @sqlstr; execute prod using @sqlargs; deallocate prepare prod; end \\ delimiter; call proc_sql('select * from woman where nid>?',2);
浙公网安备 33010602011771号