sql 中 和 的區別

2021-09-22 19:47:47 字數 938 閱讀 3874

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

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

select

*from

user

where name = $;

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

select

*from

user

where name = "dato";

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

就是解析之後的語句是:

select

*from

user

where 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.一般能用#的就別用$.

posted on 2018-09-25 15:57收藏

sql 中 和 的區別

將傳入的資料直接顯示生成在sql中,那麼我們使用 的時候 select from user where name 在動態解析的時候,會將我們傳入的引數當做string字串填充到我們的語句中,就會變成下面的語句 select from user where name dato 預編譯之前的 sql 語...

sql 中 和 的區別

專案開發過程中,在mybaitis框架中經常sql需要動態賦值,會出現 兩種形式。接下來,我們一起來看乙個案例 根據使用者的姓名來篩選使用者資訊,其中使用者姓名不確定,是動態變化的,sql如下 select from userinfo where user name 張三 查詢名稱是張三的資訊 在x...

sql中 和 的區別

font size 18px delete from ups role permission dataparams where role id 在這裡用到了 使用 時 1 用來傳入引數,sql在解析的時候會加上 當成字串來解析 如這裡 role id roleid 2 能夠很大程度上防止sql注入 ...