在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注入 ...