欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql中#{}和${}的區(qū)別詳解

 更新時間:2022年02月16日 08:45:25   作者:拒絕熬夜啊  
本文主要介紹了mysql中#{}和${}的區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

#{}會將傳入的數(shù)據(jù)當成一個字符串,會對自動傳入的數(shù)據(jù)加一個雙引號

order by #{userId}   
這里假如userId = 111,那么解析成sql時會變成 order by "111"
這里如果userId = idStr,那么解析成sql時會變成 order by "idStr"

${}會將傳入的數(shù)據(jù)直接顯示生成在sql中

order by #{userId}  
這里假如userId = 111,那么解析成sql時會變成 order by 111
這里如果userId = idStr,那么解析成sql時會變成 order by idStr

#方式能夠很大程度防止sql注入;$方式無法防止Sql注入。

$方式一般用于傳入數(shù)據(jù)庫對象,例如傳入表名。

一般能用#的就別用$。MyBatis排序時使用order by 動態(tài)參數(shù)時需要注意,用$而不是#

默認情況下,使用#{}格式的語法會導致MyBatis創(chuàng)建預處理語句屬性并以它為背景設置安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時你只是想直接在SQL語句中插入一個不改變的字符串。比如,像ORDER BY,你可以這樣來使用:

ORDER BY ${columnName}; 這里MyBatis不會修改或轉義字符串。

例子:

在沒有做防Sql注入的時候,我們的Sql語句可能是這么寫的:

<select id="fetchStudentByName" parameterType="String" resultType="entity.StudentEntity"> SELECT id,name,age FROM student WHERE name = '${value}' </select>

在這里插入圖片描述

但如果我們對傳入的姓名參數(shù)做一些更改,比如改成anything’ OR ‘x’='x,那么拼接而成的Sql就變成了

SELECT id,name,age FROM student WHERE name = 'anything' OR 'x'='x'

在這里插入圖片描述

庫里面所有的學生信息都被拉了出來,是不是很可怕。原因就是傳入的anything’ OR ‘x’='x和原有的單引號,正好組成了 ‘anything’ OR ‘x’='x’,而OR后面恒等于1,所以等于對這個庫執(zhí)行了查所有的操作。

防范Sql注入的話,就是要把整個anything’ OR ‘x’='x中的單引號作為參數(shù)的一部分,而不是和Sql中的單引號進行拼接

使用了#即可在Mybatis中對參數(shù)進行轉義

<select id="fetchStudentByName" parameterType="String" resultType="entity.StudentEntity"> SELECT id,name,age FROM student WHERE name = #{name} </select>

我們看一下發(fā)送到數(shù)據(jù)庫端的Sql語句長什么樣子。

SELECT id,name,age FROM student WHERE name = 'anything\' OR \'x\'=\'x'

到此這篇關于mysql中#{}和${}的區(qū)別的文章就介紹到這了,更多相關mysql中#{}和${}的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 分享一下Mysql常見的幾個錯誤問題及解決方法

    分享一下Mysql常見的幾個錯誤問題及解決方法

    這篇文章主要為大家分享一下Mysql常見的幾個錯誤問題及解決方法,需要的朋友可以參考下
    2015-08-08
  • mysql 重要日志文件匯總

    mysql 重要日志文件匯總

    這篇文章主要介紹了mysql 重要日志文件的匯總,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • MySQL單表查詢進階教程(最全面!)

    MySQL單表查詢進階教程(最全面!)

    ???????在我們對數(shù)據(jù)進行操作時,查詢無疑是至關重要的,查詢操作靈活多變,我們可以根據(jù)開發(fā)的需求,設計高效的查詢操作,把數(shù)據(jù)庫中存儲的數(shù)據(jù)展示給用戶,這篇文章主要給大家介紹了關于MySQL單表查詢的相關資料,需要的朋友可以參考下
    2022-11-11
  • MySQL SHOW PROCESSLIST協(xié)助故障診斷全過程

    MySQL SHOW PROCESSLIST協(xié)助故障診斷全過程

    這篇文章主要給大家介紹了關于MySQL SHOW PROCESSLIST協(xié)助故障診斷的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • 一個優(yōu)化MySQL查詢操作的具體案例分析

    一個優(yōu)化MySQL查詢操作的具體案例分析

    這篇文章主要介紹了一個優(yōu)化MySQL查詢操作的具體案例分析,主要針對join字段的使用方面做出調(diào)整,需要的朋友可以參考下
    2015-05-05
  • MySQL數(shù)據(jù)庫InnoDB數(shù)據(jù)恢復工具的使用小結詳解

    MySQL數(shù)據(jù)庫InnoDB數(shù)據(jù)恢復工具的使用小結詳解

    本篇文章是對MySQL數(shù)據(jù)庫InnoDB數(shù)據(jù)恢復工具的使用進行了詳細的總結與分析,需要的朋友參考下
    2013-06-06
  • Mysql中關于Incorrect string value的解決方案

    Mysql中關于Incorrect string value的解決方案

    在對mysql數(shù)據(jù)庫中插入數(shù)據(jù)的時候,直接插入中文是沒有問題的!但是用預編譯語句時,用流對數(shù)據(jù)進行處理總報incorrect string value這個異常。本篇文章教給你解決方法
    2021-09-09
  • MySQL中join語句怎么優(yōu)化

    MySQL中join語句怎么優(yōu)化

    本文主要介紹了MySQL中join語句怎么優(yōu)化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 最新評論