sql 中 ${} 和 #{}的區別


在sql中對於傳入參數有兩種寫法,剛開始學的時候總是不知道是什么原因,故此寫下此筆記作為解釋:

$將傳入的數據直接顯示生成在sql中,那么我們使用 ${}的時候

select * from user where name = ${name}; 

 

 ${}在動態解析的時候,會將我們傳入的參數當做String字符串填充到我們的語句中,就會變成下面的語句

select * from user where name = "dato";

預編譯之前的 SQL 語句已經不包含變量了,完全已經是常量數據了。相當於我們普通沒有變量的sql了。 #{} 在動態解析的時候,會解析成一個參數標記符。

就是解析之后的語句是:

 select * from user where name = #{name}; select * from user where name = ?;

1. #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那么解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".
  
2. $將傳入的數據直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那么解析成sql時的值為order by user_id,  如果傳入的值是id,則解析成的sql為order by id.
  
3. #方式能夠很大程度防止sql注入。
  
4.$方式無法防止Sql注入。

5.$方式一般用於傳入數據庫對象,例如傳入表名.
  
6.一般能用#的就別用$.

 

 

 

--------------------- 本文來自 水墨之白 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/ljjzj/article/details/78534162?utm_source=copy


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM