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

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

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

#{}會(huì)將傳入的數(shù)據(jù)當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)

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

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

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

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

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

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

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

ORDER BY ${columnName}; 這里MyBatis不會(huì)修改或轉(zhuǎn)義字符串。

例子:

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

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

使用了#即可在Mybatis中對(duì)參數(shù)進(jìn)行轉(zhuǎn)義

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

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

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

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

相關(guān)文章

  • Mysql指定日期區(qū)間的提取方法

    Mysql指定日期區(qū)間的提取方法

    這篇文章主要介紹了Mysql指定日期區(qū)間的提取方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • MySQL中開啟和使用通用查詢?nèi)罩镜膶?shí)例教程

    MySQL中開啟和使用通用查詢?nèi)罩镜膶?shí)例教程

    這篇文章主要介紹了MySQL中開啟和使用通用查詢?nèi)罩镜膶?shí)例教程,包括其備份和關(guān)閉等基礎(chǔ)操作的例子講解,需要的朋友可以參考下
    2015-12-12
  • 分享一下Mysql常見的幾個(gè)錯(cuò)誤問題及解決方法

    分享一下Mysql常見的幾個(gè)錯(cuò)誤問題及解決方法

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

    mysql 重要日志文件匯總

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

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

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

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

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

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

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

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

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

    Mysql中關(guān)于Incorrect string value的解決方案

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

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

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

最新評(píng)論