当前位置: 首页 > news >正文

asp网站报错信息网站推广公司推荐

asp网站报错信息,网站推广公司推荐,seo门户网站优化,企业免费邮箱目录 前言 1、处理参数的方式不同 2、${}的优点 3、SQL注入问题 4、like查询问题 前言 #{}和${}都可以在MyBatis中用来动态地接收参数,但二者在本质上还是有很大的区别。 1、处理参数的方式不同 ${} :预编译处理 MyBatis在处理#{}时&#xff0c…

目录

前言

1、处理参数的方式不同

2、${}的优点

3、SQL注入问题

4、like查询问题


前言

#{}和${}都可以在MyBatis中用来动态地接收参数,但二者在本质上还是有很大的区别。

1、处理参数的方式不同

${} :预编译处理

MyBatis在处理#{}时,会将SQL语句中的#{}替换为?,即占位符,然后使用PreparedStatement的set方法来赋值。

代码示例:

    <select id="getUserByID" resultType="com.example.demo.model.UserInfo">select * from userinfo where id=#{id}</select>

查看程序运行期间MyBatis打印的日志:

#{} :直接替换

MyBatis在处理${}时,会直接将SQL语句中的${}替换为参数的值。

代码示例:

    <select id="getUserByID" resultType="com.example.demo.model.UserInfo">select * from userinfo where id=${id}</select>

查看程序运行期间MyBatis打印的日志:

使用${}接收int类型的参数时是不会报错的,但是用来接收String类型的参数时代码就会报错:

代码示例:

    <!-- 根据用户名查询用户信息 --><select id="getUserByName" resultType="com.example.demo.model.UserInfo">select * from userinfo where username=${name}</select>

查看程序运行期间MyBatis打印的日志:

 "orange"是userinfo表中的一个用户名,在查询时需要加上单引号才能查询成功:

2、${}的优点

使用${}可以实现对查询结果的动态排序(升序/降序);而使用#{}则不能实现,如果传递的参数是String类型,#{}会对参数加单引号,就会出现SQL语句错误。

代码示例:

    <!-- 查询所有用户并排序 --><select id="getAll" resultType="com.example.demo.model.UserInfo">select * from userinfo order by ${order}</select>

如果使用#{}时,最终的SQL语句为:select * from userinfo order by id 'desc'

3、SQL注入问题

由于${}是直接替换参数,不会给参数添加单引号,因此会导致SQL语句错误,如果非要使用${},就需要手动对参数添加单引号:

但这样又会带来SQL注入的问题:

代码示例:

    <!-- 登录功能 --><select id="login" resultType="com.example.demo.model.UserInfo">select * from userinfo where username='${username}' and password='${password}'</select>

传入参数:"' or 1 = '1"

表中用户的正确用户名和密码:

查询结果:

而使用#{}就不会出现SQL注入的问题:

 

结论:能使用#{}就使用#{}!如果非要使用${},那么一定要进行参数校验。

4、like查询问题

在进行like查询时,使用#{}会报错:

代码示例:

    <select id="getUserByLike" resultType="com.example.demo.model.UserInfo">select * from userinfo where username like '%#{msg}%'</select>

此时最终的SQL语句为: select * from userinfo where username like '%‘a'’%'

而使用${}时,虽然可以达到目的,成功查询到数据,但是${}会有SQL注入问题,使用时需要进行参数校验,而用户输入的内容则是多种多样的,我们无法全部校验。

为了解决这个问题,就需要使用MySQL的内置函数concat()来处理:

    <select id="getUserByLike" resultType="com.example.demo.model.UserInfo">select * from userinfo where username like concat('%',#{msg},'%')</select>

http://www.yayakq.cn/news/939138/

相关文章:

  • 建网站商城平台株洲seo网络优化招聘网
  • 泉州网站建设网络推广大连seo外包公司
  • 网站建设产业pest分析自媒体怎么入门
  • 乡村建设的网站学做点心的网站
  • 锡林浩特网站建设宁波依众网络科技有限公司
  • 重庆夹夹虫网络公司网站建设建设房产网站
  • 邢台中高风险地区查询搜索引擎优化到底是优化什么
  • 赣州网站维护wordpress 数据库查询插件
  • 中文企业展示网站模板网站以前在百度能搜索不到了
  • 开发网站类型百度一下你就知道手机版官网
  • 如何做竞价网站做暧暧视频网站w
  • WordPress首页不收录昆明百度搜索排名优化
  • 郑州网站推广 汉狮网络微信小程序 连接网站
  • 公司做网站卖东西要什么证深圳保障房申请条件2022
  • 网站开发还是做数据库开发自定义网站模板
  • 商城网站后台模板社交网站开发难度
  • 培训学校如何做网站宣传品牌建设工作的意义
  • 建设网站的账务处理电商网站开发研究内容和预期成果
  • 网站开发技术thinkphp网站建设的书籍
  • 酒店网站建设策划方案wordpress 使用七牛
  • 大航母网站建设怎么样做农资的网站
  • wordpress工作室重庆seo排名收费
  • 国外做问卷网站天津建设工程信息网 塘沽一中
  • html网站建设流程图网页编辑哪个键
  • jsp网站开发视频德州极速网站建设小程序
  • 专做教育网站拿站lnmp一键安装包 wordpress
  • 定制网站本地企业网站备案之后
  • php网站开发 vip旅游网站的长图是怎么做的呀
  • 昌都市网站建设如何成立公司
  • 怎么看一个网站用什么平台做的郑州百姓网二手货车