预编译SQL防止SQL注入

一、数据库预编译

当我们说到关于持久层框架的功能,必然需要先想想这个功能的源头到底是不是直接通过数据库提供的。实际上和事务一样,SQL 预编译的功能也是需要数据库提供底层支持的。

1、预编译SQL的用法

以 MySQL 为例,在 MySQL 中,所谓预编译其实是指先提交带占位符的 SQL 模板,然后为其指定一个 key,MySQL 先将其编译好,然后用户再拿着 key 和占位符对应的参数让 MySQL 去执行,用法有点像 python 中的 format 函数。

一个标准的预编译 SQL 的用法如下:

prepare prepare_query from 'select * from s_user where username = ?' # 提交带有占位符的参数化 SQL,也可以理解为 SQL 模板
set @name = '%王五'; # 指定一个参数
execute prepare_query using @name; # 指定参数化 SQL 的 key 和参数,让 MySQL 自己去拼接执行

先通过 prepare 设置一个 SQL 模板,然后通过 execute 提交参数,MySQL 会自行根据参数替换占位符,到最后执行的 SQL 就是:

select * from s_user where username = '%王五'

版权声明:本文为shengyin714959原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。